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 -
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;
- 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:
- Langage c
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
3 réponses
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.
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.
#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 ;
merci
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