Fonctions et procédures utiles pour la manipulation des listes
- initialiser liste : Init_liste
- ajouter maillon : AjouterMaillon
- afficher liste : ListeAfficherIt
- afficher liste : ListeAfficherREC
- détruire liste : ListeDetruireREC
- détruire liste : ListeDetruireIt
- tester si la liste est vide : ListeVide
- parcours de la liste récursif : ParcoursREC
Définition récursive d'une liste
- renvoie la position du premier maillon : Tete
- renvoie la liste à l'exception du premier maillon : Reste
- renvoie la valeur du premier maillon : Premier
- renvoie l'élément d'une position donnée : Contenu
- renvoie la position qui suit la position donnée : Suivant
(...)
[...] Maillon a detruire: 22 Maillon detruit! Maillon a detruire: 96 Maillon detruit! La memoire dynamiquement allouee pour la liste a ete liberee Liste: 65 82 32 NULL *fonction Concatenation sans duplication Liste: 67 22 96 65 82 32 NULL *fonction Concatenation avec duplication Liste originale: Liste: 67 22 96 65 82 32 NULL tmp1 Liste: 67 22 96 65 82 32 NULL tmp2 Liste: 65 82 32 NULL Liste: 67 22 96 65 82 32 65 82 32 NULL Maillon a detruire: 67 Maillon detruit! [...]
[...] copier : Liste . Liste Concaténation de deux listes : Construire une liste en mettant deux listes bout à bout concaténer : Liste x Liste . Liste Vous proposerez deux versions : sans duplication des éléments, avec duplication des éléments. [...]
[...] Le même élément peut figurer plusieurs fois dans une liste. On définira plutôt la liste comme un ensemble ordonnée d'emplacement d'éléments, éléments rangés par ordre d'insertion. Type liste Utilise Rang, Position, Elément. [...]
[...] Conclusion: Concernant ce devoir, je suis satisfaite car je suis parvenue à implémenter les fonctions et procédures en manipulant des pointeurs ; chose que je ne maîtrisais pas très bien jusqu'à présent. Mes procédures fonctionnent correctement et j'ai essayé de soigner ma présentation de code et d'exécutable car on se situe dans un programme assez long où les commentaires sont indispensables pour la compréhension de ce code. en ce qui concerne la réponse fournie a la question 3 de l'exercice 1 je ne sais pas si cela correspond à ce qui était demandé car je n'ai pas obtenu de réponse à mes demandes. [...]
[...] Si la valeur est présente dans la liste, renvoie rang, sinon valeur arbitraire int RechercherREC(TListe liste,int pos,int element) { if (liste NULL) { if (liste->valeur==element) { return pos+1; } else { return RechercherREC(Reste(liste), pos, element); } } else { return } } DupliquerSansCopie : on renvoie le pointeur de tête TListe DupliquerSansCopie(TListe liste) { return liste; } DupliquerAvecCopie : on recopie la liste et on renvoie le pointeur sur la tête de la nouvelle liste TListe DupliquerAvecCopie(TListe liste, TListe *copie) { int flag = TListe tmp=NULL; while (liste NULL) { TListe nouveau_maillon = NULL; allocation de mémoire nouveau_maillon = (TListe) malloc(sizeof(maillon_t)); affectation des valeurs nouveau_maillon ->valeur = liste->valeur; if (flag > { tmp->pSuivant = nouveau_maillon; tmp = nouveau_maillon; } if (flag { flag++; conserve la tête *copie = nouveau_maillon; tmp = nouveau_maillon; } nouveau_maillon ->pSuivant = NULL; et ensuite la liste va pointer sur le nouveau maillon /*copie = nouveau_maillon;*/ liste = liste->pSuivant; } return *copie; } Concaténation sans duplication TListe Concat(TListe liste1,TListe liste2) { TListe tmp = liste1; while (tmp->pSuivant NULL) tmp = tmp->pSuivant; modifie la fin de la liste1 tmp->pSuivant = liste2; return liste1; } Concaténation avec duplication TListe ConcatDuplic(TListe liste1,TListe liste2) { TListe tmp, tmp1=NULL, tmp2=NULL; tmp1 = DupliquerAvecCopie(liste1,&tmp1); printf("tmp1\n"); ListeAfficherIt(tmp1); tmp2 = DupliquerAvecCopie(liste2,&tmp2); printf("tmp2\n"); ListeAfficherIt(tmp2); tmp = tmp1; while (tmp->pSuivant NULL) tmp = tmp->pSuivant; tmp->pSuivant = tmp2; return tmp1; } PROGRAMME PRINCIPAL int main(void) { déclarations TListe liste, copie, concat; int valeur; TPosition position; int pos, entier; int longueur; Liste des fonctions et procedures utilises dans ce programme: Fonctions et procedures utiles pour la manipulation des listes printf("- initialiser liste : Init_liste\n"); printf("- ajouter maillon : AjouterMaillon\n"); printf("- afficher liste : ListeAfficherIt\n"); printf("- afficher liste : ListeAfficherREC\n"); printf("- detruire liste : ListeDetruireIt\n"); printf("- detruire liste : ListeDetruireREC\n"); printf("- tester si la liste est vide : ListeVide\n"); printf("- parcours de la liste récursif: ParcoursREC\n"); Definition recursive d'une liste printf("- renvoie la position du premier maillon : Tete\n"); printf("- renvoie la liste a l'exception du premier maillon: Reste\n"); printf("- renvoie la valeur du premier maillon: Premier\n"); printf("- renvoie l'element d'une position donnée: Contenu\n"); printf("- renvoie la position qui suit la position donnée: Suivant\n"); Operations supplementaires sur les listes printf("- si la valeur est presente dans la liste, renvoie VRAI, sinon FAUX: EstPresentREC\n"); printf("- si la valeur est presente dans la liste, renvoie rang: RechercherREC\n"); printf("- dupliquer une liste (sans duplication des elements):DupliquerSansCopie\n"); printf("- dupliquer une liste (avec duplication des elements):DupliquerAvecCopie\n"); printf("- construire une liste en mettant deux listes bout a bout(sans duplication):Concat\n"); printf("- construire une liste en mettant deux listes bout a bout(avec duplication):ConcatDuplic\n"); /*choix longueur liste*/ printf("\n Veuillez entrer la longueur de votre listn"); scanf ("%d",&longueur); printf("\n"); //fonction Init_liste printf("*fonction Init_listn"); liste = Init_Liste(); Init_liste (&liste); ListeAfficherIt(liste); /*initialisation de la suite de nombres srand((unsigned int) time(NULL)); for (i=0;ivaleur); printf("\n"); fonction Tete printf("*Fonction Tete :renvoie la valeur du premier element"); printf("%d",Tete(liste)->pSuivant); printf("\n"); //fonction Premier printf("*Fonction Premier :renvoie la valeur du premier element"); printf("%d",Premier(liste)); printf("\n\n"); //fonction ParcoursREC printf(" *fonction ParcoursREn renvoie a partir d'une position donnee l'element situe a cette place.\n"); printf("\n Veuillez entrer la position scanf printf("%d",ParcoursREC(liste,0,pos-1)); printf("\n"); //fonction EstPresentREC printf(" *fonction EstPresentREn Si la valeur est presente dans la liste, renvoie VRAI sinon FAUX printf("\n Veuillez entrer l'element a chercher scanf printf("%d",EstPresentREC(liste,0,entier)); printf("\n"); //fonction RechercherREC printf(" *fonction RechercherREn Si la valeur est presente dans la liste, renvoie rang, sinon printf("\n Veuillez entrer l'element a chercher scanf RechercherREC(liste,0,entier); if (RechercherREC(liste,0,entier)==0) { printf("cet element n'appartient pas a cette liste par consequent on ne peut pas renvoyer de rang\n"); } else { printf("le rang de cet element est %d:",RechercherREC(liste,0,entier)); } printf("\n\n"); //fonction DupliquerSansCopie copie = DupliquerSansCopie(liste); ListeAfficherIt(copie); /*Affichage liste itératif //fonction DupliquerAvecCopie copie = NULL; copie = DupliquerAvecCopie(liste,&copie); ListeAfficherIt(copie); /*Affichage liste itératif printf("\n"); on crée une liste copie différente, ça permet de mieux voir la concaténation ListeDetruireIt(copie); printf("\n"); copie = Init_Liste(); Init_liste (&liste); initialisation de la suite de nombres srand((unsigned int) time(NULL)); for Liste: NULL Affichage liste iteratif Liste: 67 22 96 NULL Affichage liste recursif Liste: 67 22 96 NULL *fonction EstLvide: renvoie 1 si la liste est vide et 0 dans le cas contraire : 0 *Fonction Reste :renvoie la valeur du second element22 *Fonction Tete :renvoie la valeur du premier element4398672 *Fonction Premier :renvoie la valeur du premier element67 *fonction ParcoursREC: renvoie a partir d'une position donnee l'element situe a cette place. Veuillez entrer la position 1 Valeur 67 trouvee en position *fonction EstPresentREC: Si la valeur est presente dans la liste, renvoie VRAI sinon FAUX Veuillez entrer l'element a chercher 22 Valeur 22 trouvee en position *fonction RechercherREC: Si la valeur est presente dans la liste, renvoie rang, sinon 0. Veuillez entrer l'element a chercher 96 le rang de cet element est Liste: 67 22 96 NULL Liste: 67 22 96 NULL Maillon a detruire: 67 Maillon detruit! [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture