A voir également:
- Ajouter un element au debut d'une liste chainée en c
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Ajouter un compte gmail - Guide
- Ajouter une application au démarrage - Guide
- Ajouter un compte whatsapp - Guide
4 réponses
merci , pour ton lien mais il est un peut compliqué si vous avez un autre lien ou une autre méthode laisser la et je vais voir .........merci pour votre aide
rimounatn
Messages postés
93
Date d'inscription
jeudi 24 décembre 2009
Statut
Membre
Dernière intervention
7 septembre 2010
15
30 déc. 2009 à 20:59
30 déc. 2009 à 20:59
bonjour, j'espere que je vais t'aidé voici des fonctions sur les listes chainée (simple):
#include<stdio.h>
#include<stdlib.h>
struct element{
int valeur;
struct element * suivant;
};
typedef struct element element;
typedef element* liste;
liste ajouterEnTete(liste L, int v){
liste temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
if(L==NULL){
//Liste Vide
temp->suivant = NULL;
}else{
temp->suivant=L;
}
return temp;
}
liste ajouterEnFinIterative(liste L, int v){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
//parcourir iterativement jusK la fin
element * aux = L;
while(aux->suivant != NULL) {
aux=aux->suivant;
}
aux->suivant = temp;
return L;
}
//ici c'est une procedure donc on passe l'adresse de la liste et non pas la liste elle même (passage par adresse)
void ajouterEnFinRecursive(liste* L, int v){
if(*L == NULL){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
*L=temp;
//printf("cas L null element valeur %i ajouté\n",v);
}else if((*L)->suivant == NULL){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
(*L)->suivant = temp;
//printf("cas L->suivant null element valeur %i ajouté\n",v);
}else{
liste ptr = (*L)->suivant;
ajouterEnFinRecursive(&ptr,v);
}
}
liste SupprimerElementEnTete(liste L){
if(L==NULL){
return NULL;
}else{
liste tmp;
tmp = L->suivant;
free(L);
return tmp;
}
}
liste SupprimerElementEnFin(liste L){
if(L==NULL){//liste vide
return NULL;
}else if(L->suivant == NULL){//liste à 1 element
free(L);
return NULL;
}else{
liste ptrDernierElem = L;
liste ptrAvantDernierElem;
while(ptrDernierElem->suivant != NULL) {
ptrAvantDernierElem = ptrDernierElem;
ptrDernierElem = ptrDernierElem->suivant;
}
ptrAvantDernierElem->suivant=NULL;
free(ptrDernierElem);
return L;
}
}
liste SupprimerElement_i(liste L,int index){
if(index==0){//premier elem
return SupprimerElementEnTete(L);
}else{
liste ptrSurElem = L;
liste ptrAvantElem;
int i=0;
while(ptrSurElem->suivant != NULL && i!=index) {
ptrAvantElem = ptrSurElem;
ptrSurElem = ptrSurElem->suivant;
i++;
}
if(i==index){//l'element i existe
ptrAvantElem->suivant=ptrSurElem->suivant;
free(ptrSurElem);
return L;
}else{//index superieur à la taille de la liste
return L;// pas de changement
}
}
}
int nbOccurences_val(liste L, int val){
liste ptr = L;
int nbOcc_val = 0;
while(ptr != NULL){
if(ptr->valeur == val){
nbOcc_val++;
}
ptr = ptr->suivant;
}
return nbOcc_val;
}
int tailleListeIterative(liste L){
element* ptr;
int taille=0;
ptr = L;
while(ptr != NULL){
ptr = ptr->suivant;
taille++;
}
return taille;
}
int tailleListeRecursive(liste L){
if(L == NULL){
return 0;
}else{
return 1+tailleListeRecursive(L->suivant);
}
}
int estVide(liste L){
//classique
//return (L == NULL);
return (L==NULL)? 1 : 0;
}
void afficherListe(liste L){
element* ptr;
int i=0;
ptr = L;
while(ptr != NULL){
printf("element num %i = %i\n",i,ptr->valeur);
i++;
ptr = ptr->suivant;
}
}
element* Element_i(liste L, int index){
element* ptrSurElem = L;
int i=0;
while(ptrSurElem->suivant != NULL && i!=index) {
ptrSurElem = ptrSurElem->suivant;
i++;
}
if(i==index){//l'element i existe
return ptrSurElem;
}else{//index superieur à la taille de la liste
return NULL;// pas de changement
}
}
int main(){
liste maListe = NULL;
int i=0;
for(i=0;i<10;i++){
ajouterEnFinRecursive(&maListe,i);
}
printf("Liste au debut:\n");
afficherListe(maListe);
printf("la taille par recursivité est %i\n",tailleListeRecursive(maListe));
printf("la taille par maniere iterative est %i\n",tailleListeIterative(maListe));
return 0;
}
bon courage
#include<stdio.h>
#include<stdlib.h>
struct element{
int valeur;
struct element * suivant;
};
typedef struct element element;
typedef element* liste;
liste ajouterEnTete(liste L, int v){
liste temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
if(L==NULL){
//Liste Vide
temp->suivant = NULL;
}else{
temp->suivant=L;
}
return temp;
}
liste ajouterEnFinIterative(liste L, int v){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
//parcourir iterativement jusK la fin
element * aux = L;
while(aux->suivant != NULL) {
aux=aux->suivant;
}
aux->suivant = temp;
return L;
}
//ici c'est une procedure donc on passe l'adresse de la liste et non pas la liste elle même (passage par adresse)
void ajouterEnFinRecursive(liste* L, int v){
if(*L == NULL){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
*L=temp;
//printf("cas L null element valeur %i ajouté\n",v);
}else if((*L)->suivant == NULL){
element * temp = NULL;
temp = (liste)malloc(sizeof(element));
temp->valeur = v;
temp->suivant = NULL;
(*L)->suivant = temp;
//printf("cas L->suivant null element valeur %i ajouté\n",v);
}else{
liste ptr = (*L)->suivant;
ajouterEnFinRecursive(&ptr,v);
}
}
liste SupprimerElementEnTete(liste L){
if(L==NULL){
return NULL;
}else{
liste tmp;
tmp = L->suivant;
free(L);
return tmp;
}
}
liste SupprimerElementEnFin(liste L){
if(L==NULL){//liste vide
return NULL;
}else if(L->suivant == NULL){//liste à 1 element
free(L);
return NULL;
}else{
liste ptrDernierElem = L;
liste ptrAvantDernierElem;
while(ptrDernierElem->suivant != NULL) {
ptrAvantDernierElem = ptrDernierElem;
ptrDernierElem = ptrDernierElem->suivant;
}
ptrAvantDernierElem->suivant=NULL;
free(ptrDernierElem);
return L;
}
}
liste SupprimerElement_i(liste L,int index){
if(index==0){//premier elem
return SupprimerElementEnTete(L);
}else{
liste ptrSurElem = L;
liste ptrAvantElem;
int i=0;
while(ptrSurElem->suivant != NULL && i!=index) {
ptrAvantElem = ptrSurElem;
ptrSurElem = ptrSurElem->suivant;
i++;
}
if(i==index){//l'element i existe
ptrAvantElem->suivant=ptrSurElem->suivant;
free(ptrSurElem);
return L;
}else{//index superieur à la taille de la liste
return L;// pas de changement
}
}
}
int nbOccurences_val(liste L, int val){
liste ptr = L;
int nbOcc_val = 0;
while(ptr != NULL){
if(ptr->valeur == val){
nbOcc_val++;
}
ptr = ptr->suivant;
}
return nbOcc_val;
}
int tailleListeIterative(liste L){
element* ptr;
int taille=0;
ptr = L;
while(ptr != NULL){
ptr = ptr->suivant;
taille++;
}
return taille;
}
int tailleListeRecursive(liste L){
if(L == NULL){
return 0;
}else{
return 1+tailleListeRecursive(L->suivant);
}
}
int estVide(liste L){
//classique
//return (L == NULL);
return (L==NULL)? 1 : 0;
}
void afficherListe(liste L){
element* ptr;
int i=0;
ptr = L;
while(ptr != NULL){
printf("element num %i = %i\n",i,ptr->valeur);
i++;
ptr = ptr->suivant;
}
}
element* Element_i(liste L, int index){
element* ptrSurElem = L;
int i=0;
while(ptrSurElem->suivant != NULL && i!=index) {
ptrSurElem = ptrSurElem->suivant;
i++;
}
if(i==index){//l'element i existe
return ptrSurElem;
}else{//index superieur à la taille de la liste
return NULL;// pas de changement
}
}
int main(){
liste maListe = NULL;
int i=0;
for(i=0;i<10;i++){
ajouterEnFinRecursive(&maListe,i);
}
printf("Liste au debut:\n");
afficherListe(maListe);
printf("la taille par recursivité est %i\n",tailleListeRecursive(maListe));
printf("la taille par maniere iterative est %i\n",tailleListeIterative(maListe));
return 0;
}
bon courage