Langage c

tonami Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,je voudrais svp un programme sur les liste chainées qui contient :
- calcul de la longueur d’une liste,
- recherche d’un élément,
- insertion d’un élément,
- suppression d’un élément,
- concaténation de deux listes,
- destruction d’une liste.
merci d'avance;
A voir également:

3 réponses

frt
 
Et ou est le bug ?
Ou est ton code ?
0
tonami
 
j'ai trouvé ceci
#include #include #include typedef struct ElementListe{ char *donnee; struct ElementListe *suivant; } Element; typedef struct ListeRepere{ Element *debut; int taille; } list_att; /* initialisation */ void initialisation (list_att *tas); /* EMPILER*/ int empiler (list_att *head, char *donnee); /* DEPILER*/ int depiler (list_att *head); #define pile_donnee(head) head->debut->donnee void affiche (list_att *head); int main () { list_att *head; char *nom; if ((head = (list_att *) malloc (sizeof (list_att))) == NULL) return -1; if ((nom = (char *) malloc (50 * sizeof (char))) == NULL) return -1; initialisation (head); printf ("Entrez un entier : "); scanf ("%s", nom); empiler (head, nom); printf ("(%d éléments): \n",head->taille); printf("\n********** Haut de la list_att **********\n"); affiche(head); printf("__________ Bas de la list_att __________\n\n"); goto ana; nta:; printf ("Entrez un entier : "); scanf ("%s", nom); empiler (head, nom); printf ("(%d éléments): \n",head->taille); printf("\n********** Haut de la list_att **********\n"); affiche(head); printf("__________ Bas de la list_att __________\n\n"); printf ("Entrez un entier : "); scanf ("%s", nom); empiler (head, nom); printf ("(%d éléments): \n",head->taille); printf("\n********** Haut de la list_att **********\n"); affiche(head); printf("__________ Bas de la list_att __________\n\n"); printf ("Entrez un entier : "); scanf ("%s", nom); empiler (head, nom); printf ("(%d éléments): \n",head->taille); printf("\n********** Haut de la list_att **********\n"); affiche(head); printf("__________ Bas de la list_att __________\n\n"); goto howa; ana:; printf ("\nLe premier entré (FirstInFirstOut) [ %s ] \nsera supprimé aprés l'afichage\n", pile_donnee(head)); depiler (head); goto nta; howa:; /* suppression de dernier element entre */ printf ("(%d éléments): \n",head->taille); printf("\n********** Haut de la list_att **********\n"); affiche(head); printf("__________ Bas de la list_att __________\n\n"); } /***********************\ * Les fonctions * \***********************/ void initialisation (list_att * head){ head->debut = NULL; head->taille = 0; } int empiler (list_att * head, char *donnee){ Element *nouveau_element; if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL) return -1; if ((nouveau_element->donnee = (char *) malloc (50 * sizeof (char))) == NULL) return -1; strcpy (nouveau_element->donnee, donnee); nouveau_element->suivant = head->debut; head->debut = nouveau_element; head->taille++; return 0; } int depiler (list_att * head){ Element *supp_element; if (head->taille == 0) return -1; supp_element = head->debut; head->debut = head->debut->suivant; head->taille--; free (supp_element->donnee); free (supp_element); return 0; } void affiche (list_att * head){ Element *courant; int i; courant = head->debut; for(i=0;itaille;++i){ printf("\t\t%s\n", courant->donnee); courant = courant->suivant; } }



mais je le n'ai pa compris pouvais vous me le simplifier svp
merci pour votre aide ;
0
lucieb31 Messages postés 345 Date d'inscription   Statut Membre Dernière intervention   62 > tonami
 
ce programme est trés mal indenté et donc difficile a lire, pourai tu sauté des lignes au endroit qu'il faut pour nous facilité la lecture.
merci
0
tonami > lucieb31 Messages postés 345 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai fais ce que je peu mais ca ne se compile pa
erci pour votre aide voila le cole:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct ElementListe{ char *donnee; struct ElementListe *suivant; } Element;
typedef struct ListeRepere{ Element *debut; int taille; }
list_att; /* initialisation */ void initialisation (list_att *tas);
/* EMPILER*/ int empiler (list_att *head, char *donnee);
/* DEPILER*/ int depiler (list_att *head);
#define pile_donnee(head) head->debut->donnee
void affiche (list_att *head); int main () { list_att *head; char *nom;
if ((head = (list_att *) malloc (sizeof (list_att))) == NULL) return -1;
if ((nom = (char *) malloc (50 * sizeof (char))) == NULL) return -1;
initialisation (head); printf ("Entrez un entier : ");
scanf ("%s", nom); empiler (head, nom); printf ("(%d éléments): \n",head->taille);
printf("\n********** Haut de la list_att **********\n"); affiche(head);
printf("__________ Bas de la list_att __________\n\n"); goto ana; nta:
; printf ("Entrez un entier : "); scanf ("%s", nom); empiler (head, nom);
printf ("(%d éléments): \n",head->taille);
printf("\n********** Haut de la list_att **********\n"); affiche(head);
printf("__________ Bas de la list_att __________\n\n");
printf ("Entrez un entier : ");
scanf ("%s", nom); empiler (head, nom);
printf ("(%d éléments): \n",head->taille);
printf("\n********** Haut de la list_att **********\n");
affiche(head);
printf("__________ Bas de la list_att __________\n\n"); printf ("Entrez un entier : ");
scanf ("%s", nom); empiler (head, nom); printf ("(%d éléments): \n",head->taille);
printf("\n********** Haut de la list_att **********\n");
affiche(head);
printf("__________ Bas de la list_att __________\n\n"); goto howa; ana:;
printf ("\nLe premier entré (FirstInFirstOut) [ %s ] \nsera supprimé aprés l'afichage\n", pile_donnee(head));
depiler (head); goto nta; howa:; /* suppression de dernier element entre */
printf ("(%d éléments): \n",head->taille);
printf("\n********** Haut de la list_att **********\n");

affiche(head);
printf("__________ Bas de la list_att __________\n\n"); } /***********************\ * Les fonctions * \***********************/
void initialisation (list_att * head){ head->debut = NULL; head->taille = 0; }
int empiler (list_att * head, char *donnee){ Element *nouveau_element;
if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL) return -1;
if ((nouveau_element->donnee = (char *) malloc (50 * sizeof (char))) == NULL) return -1;
strcpy (nouveau_element->donnee, donnee);
nouveau_element->suivant = head->debut; head->debut = nouveau_element; head->taille++; return 0; }
int depiler (list_att * head){ Element *supp_element;
if (head->taille == 0) return -1;
supp_element = head->debut; head->debut = head->debut->suivant; head->taille--;
free (supp_element->donnee);
free (supp_element); return 0; }
void affiche (list_att * head){ Element *courant;
int i;
courant = head->debut;
for(i=0;itaille;++i){
printf("\t\t%s\n", courant->donnee);
courant = courant->suivant; } }
merci
0
lucieb31 Messages postés 345 Date d'inscription   Statut Membre Dernière intervention   62
 
quelles sont le erreurs lors de la compilation ?
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,
Regarde ici http://www.commentcamarche.net/faq/sujet 7444 liste simplement chainee

Il te reste à faire la recherche d'un élément. Pour ça il faut que tu crée une fonction comparer par exemple.
Pour la concaténation il suffit de faire pointer le pointeur suivant de dernier élément de la 1ère liste sur le 1er élément de la deuxième liste.
0