Création
d'entreprise
Posez votre question Signaler

Les piles et les files sous le langage C

ISIMG - Dernière réponse le 16 nov. 2007 à 23:46
Salut,
S'il vous plait des cours et des exercices "Bien Claires" sur les piles et les files sous langage C
Merci
Lire la suite 

Les piles et les files sous le langage C »

5 réponses
Réponse
+11
moins plus
Salut,

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
Ajouter un commentaire
Réponse
+2
moins plus
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é...
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,
j'ai le mm blem et vrm je cè pa koi fair!! aider ns svp!!
Ajouter un commentaire
Réponse
+0
moins plus
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?
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « Les piles et les files sous le langage C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?