Langage c

Fermé
tonami Messages postés 7 Date d'inscription dimanche 12 avril 2009 Statut Membre Dernière intervention 12 avril 2009 - 12 avril 2009 à 05:48
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 13 avril 2009 à 13:15
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

Et ou est le bug ?
Ou est ton code ?
0
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 mercredi 14 janvier 2009 Statut Membre Dernière intervention 28 juillet 2012 62 > tonami
12 avril 2009 à 13:28
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 mercredi 14 janvier 2009 Statut Membre Dernière intervention 28 juillet 2012
13 avril 2009 à 02:24
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 mercredi 14 janvier 2009 Statut Membre Dernière intervention 28 juillet 2012 62
13 avril 2009 à 12:43
quelles sont le erreurs lors de la compilation ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 avril 2009 à 13:15
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