Bonjour,
dans le cadre de l'amélioration d'un programme de pendu pour l'école, je dois manipuler une liste chainée (en langage C).
Avant de bousiller le programme, sachant que je ne maitrisais pas trop les liste chainées, j'ai créé un petit programme tout simple pour voir le fonctionnement de ce genre de structure, voici ce que j'ai :
Fichier contenant la structure et les prototypes:
typedef struct pile
{
int valeur;
struct pile *prec;
}pile;
void push(pile **p, int val);
int pop(pile **p);
int Length(pile *p);
void clear(pile **p);
void view(pile *p);
Fichier contenant les implémentations de mes fonctions:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "struct.h"
void push(pile **p, int val)
{
pile *element=(pile*)malloc(sizeof(pile));
if(!element)
{
printf("erreur allocation, relancer le programme");
exit(-1);
}
element->valeur=val;
element->prec=*p;
*p=element;
};
int pop(pile **p)
{
int val;
pile *tmp;
if(!*p) return -1;
tmp=(*p)->prec;
val=(*p)->valeur;
free(*p);
*p=tmp;
return val;
};
int Length(pile *p)
{
int n=0;
while(p)
{
n++;
p=p->prec;
}
return n;
};
void clear(pile **p)
{
pile *tmp;
while(*p)
{
tmp=(*p)->prec;
free(*p);
*p=tmp;
}
};
void view(pile *p)
{
while(p)
{
printf("%d\n",p->valeur);
p=p->prec;
}
}
Fichier main pour les tests :
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "struct.h"
int main(void)
{
pile *MaPile=NULL;
int menu,nb;
do
{
system("CLS");
printf("1. ajouter un element a la pile\n");
printf("2. enlever un element de la pile\n");
printf("3. afficher la pile\n");
printf("4. nombre d'elements dans la pile\n");
printf("5. quitter\n");
scanf("%d",&menu);
system("CLS");
switch(menu)
{
case 1 : printf("Nombre (entier) a ajouter: ");
scanf("%d",&nb);
push(&MaPile,nb);
break;
case 2 : nb=pop(&MaPile);
break;
case 3 : view(MaPile);
getch();
break;
case 4 : printf("Nb elements: %d\n",Length(MaPile));
getch();
break;
case 5 : clear(&MaPile);
break;
default: printf("entrer un chiffre entre 1 et 5");
getch();
break;
}
}while(menu!=5);
return 0;
}
j'ai trouvé les implémentations sur le net et je les comprends assez bien.
Ce dont j'ai besoin maintenant, c'est une fonction permettant d'aller à un maillon bien précis pour en retirer le contenu et ensuite le supprimer.
