Les piles et les files sous le langage C
Fermé
ISIMG
-
10 avril 2007 à 19:52
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 16 nov. 2007 à 23:46
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 16 nov. 2007 à 23:46
5 réponses
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
18 oct. 2007 à 11:34
18 oct. 2007 à 11:34
Salut,
fichier d'en-tête
lami20j
fichier d'en-tête
/*********************\ * pile.h * \*********************/ typedef struct ElementListe{ char *donnee; struct ElementListe *suivant; } Element; typedef struct ListeRepere{ Element *debut; int taille; } Liste; /* initialisation */ void initialisation (Liste * liste); /* EMPILER*/ int empiler (Liste * liste, Element * courant, char *donnee); /* DEPILER*/ int depiler (Liste * liste); /* LastInFirstOut */ void affiche_dernier (Liste * liste);Les fonctions
/***********************\ * pile_function.h * \***********************/ void initialisation (Liste * liste){ liste->debut = NULL; liste->taille = 0; } int empiler (Liste * liste, Element * courant, 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 = liste->debut; liste->debut = nouveau_element; liste->taille++; } int depiler (Liste * liste){ Element *supp_element; if (liste->taille == 0) return -1; supp_element = liste->debut; liste->debut = liste->debut->suivant; free (supp_element->donnee); free (supp_element); liste->taille--; return 0; } void affiche_dernier (Liste * liste){ /* le dernier entre et le 1er affiche (LastInFirstOut) */ printf ("dernier entrer premier sortie (LIFO): %s\n", liste->debut->donnee); }main
/*********************\ * pile.c * \*********************/ #include<stdio.h> #include<stdlib.h> #include<string.h> #include "pile.h" #include "pile_function.h" int main () { Liste *liste; char *nom; if ((liste = (Liste *) malloc (sizeof (Liste))) == NULL) return -1; if ((nom = (char *) malloc (50 * sizeof (char))) == NULL) return -1; initialisation (liste); printf ("Entrez un mot : "); scanf ("%s", nom); empiler (liste, NULL, nom); affiche_dernier (liste); /*le dernier entre sera affiche */ printf ("La pile(%d): %s\n", liste->taille, liste->debut->donnee); printf ("Entrez un mot : "); scanf ("%s", nom); empiler (liste, NULL, nom); affiche_dernier (liste); printf ("La pile(%d):%s,%s\n", liste->taille, liste->debut->donnee, liste->debut->suivant->donnee); printf ("Entrez un mot : "); scanf ("%s", nom); empiler (liste, NULL, nom); printf ("La pile(%d): %s,%s,%s\n", liste->taille, liste->debut->donnee, liste->debut->suivant->donnee, liste->debut->suivant->suivant->donnee); affiche_dernier (liste); printf ("Le dernier entre est supprime"); depiler (liste); /* suppression de dernier element entre */ printf ("\nLa pile(%d): %s,%s\n", liste->taille, liste->debut->donnee, liste->debut->suivant->donnee); return 0; }--
lami20j
c-moi
Messages postés
81
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
6 juillet 2011
10
18 oct. 2007 à 08:56
18 oct. 2007 à 08:56
Bonjour,
vous voulez un cours expliquant le fonctionnement des piles et des files, en algo, ou sur comment implémenter ce système en C ? De mémoire, il n'y pas grande différence, vu que l'on utilise bien souvent les mêmes structures de données en algo et en C (évidemment, me direz vous).
c-moi, par réveillé...
vous voulez un cours expliquant le fonctionnement des piles et des files, en algo, ou sur comment implémenter ce système en C ? De mémoire, il n'y pas grande différence, vu que l'on utilise bien souvent les mêmes structures de données en algo et en C (évidemment, me direz vous).
c-moi, par réveillé...
Bonjour,
la solution précédente fonctionne très bien, mais sans pouvoir faire une boucle avec un nombre infini d'enregistrement. Ainsi, pour aller rechercher la dernière donnée entrée, il faut faire liste->debut->suivant->suivant->...suivant...->donnee . Et cela ne peut pas être fait pour une boucle.
Comment pourrions-nous faire?
la solution précédente fonctionne très bien, mais sans pouvoir faire une boucle avec un nombre infini d'enregistrement. Ainsi, pour aller rechercher la dernière donnée entrée, il faut faire liste->debut->suivant->suivant->...suivant...->donnee . Et cela ne peut pas être fait pour une boucle.
Comment pourrions-nous faire?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
16 nov. 2007 à 23:46
16 nov. 2007 à 23:46
Salut,
la dernière donnée entrée tu la trouves en fait au début de la liste
liste->debut->donnee
ce que tu cherches c'est en fait le 1er élément entré
mais ici il s'agit d'une pile
tu dois plutôt regarder liste simplement chaînée
pour aller rechercher la dernière donnée entrée,
et tu n'auras qu'à faire liste->fin->donnee
la dernière donnée entrée tu la trouves en fait au début de la liste
liste->debut->donnee
ce que tu cherches c'est en fait le 1er élément entré
mais ici il s'agit d'une pile
tu dois plutôt regarder liste simplement chaînée
pour aller rechercher la dernière donnée entrée,
et tu n'auras qu'à faire liste->fin->donnee