Problème liste chainée

diabloangel666 - 15 juin 2013 à 10:23
 ringo73 - 27 juin 2013 à 17:24
Bonjour, pour un cours je doit créer une liste chainée avec un menu. J'ai tout créé, mais la suppression ne fonctionne pas, est-ce que quelqu'un peux m'aider? Merci
Voici l'algorithme :

#include <stdio.h>
#include<string.h>
#include<stdlib.h>

struct liste
{
char info[61];
char cle[61];
struct liste*suiv;
};

struct element
{
char nom[30];
char prenom[30];
char cle[61];
};


main()
{
int fin, x,i,taille, taillenom,tailleprenom;
char nom[30];
char prenom[30];
char cle[61];
char info[30];
struct liste*creation();
struct liste*tete;
struct liste*ajout(struct liste*,char[], char[]);
void affichage(struct liste*);
struct liste*suppression();
fin=0;
do
{
printf("\n------\n");
printf("|Menu|\n");
printf("------\n\n");
printf("1.Creation \n2.Ajout \n3.Suppression \n4.Affichage \n0.Fin\n\n");
scanf("%d",&x);
if(x<5)
{
switch(x)
{
case 0:
{
printf("\nAu revoir\n");
fin=1;
break;
}

case 1:
{
tete=creation();
break;
}

case 2:
{
fflush(stdin); // vide le buffer
printf("\nEntrer le nom : ");
gets(nom);
printf("\nEntrer le prenom : ");
gets(prenom);
taillenom=strlen(nom);
tailleprenom=strlen(prenom);
taille=taillenom+tailleprenom;
for(i=0;i<taillenom;i++)
{
info[i]=nom[i];
}
info[taillenom]=' ';
for(i=taillenom+1;i<taille+1;i++)
{
info[i]=prenom[i-(taillenom+1)];
}
for(i=0;i<61;i++)
{
cle[i]=0;
}
for(i=0;i<taille+1;i++)
{
if ((info[i]>=97)&&(info[i]<=122))
{
cle[i]=info[i]-32;
}
else
{
cle[i]=info[i];
}
}
tete=ajout(tete,info,cle);
break;
}

case 3:
{
fflush(stdin); // vide le buffer
printf("\nEntrez le nom et prenom a supprimer (ex:Nom Prenom): ");
gets(info);
for(i=0;i<taille+1;i++)
{
if ((info[i]>=97)&&(info[i]<=122))
{
cle[i]=info[i]-32;
}
else
{
cle[i]=info[i];
}
}
tete=suppression(tete,cle);
printf("\n\n");
break;
}

case 4:
{
printf("\nListe\n");
printf("------\n");
affichage(tete);
printf("\n\n");
system("pause");
break;
}
}
}

}while(fin==0);
}

struct liste*creation()
{
return NULL;
}

struct liste*ajout(struct liste*p, char info[], char cle[])
{
struct liste*q;
if (p!=NULL)
{
if(strcmp(cle,p->cle)>0)
{
p->suiv=ajout(p->suiv,info,cle);
q=p;
}
else
{
if(strcmp(cle,p->cle)==0)
{
q=p;
}
else
{
q=(struct liste*)malloc(sizeof(struct liste));
strcpy(q->info,info);
strcpy(q->cle,cle);
q->suiv=p;
}
}
}
else
{
q=(struct liste*)malloc(sizeof(struct liste));
strcpy(q->info,info);
strcpy(q->cle,cle);
q->suiv=NULL;
}
return q;
}

void affichage(struct liste*p)
{
// on va commencer par trier par ordre croissant
if(p!=NULL)
{
puts(p->cle);
affichage(p->suiv);
}
}

struct liste*suppression(struct liste*p, char cle[])
{
struct liste*q;
if(p!=NULL)
{
if(strcmp(cle,p->cle)>0)
{
p->suiv=suppression(p->suiv,cle);
q=p;
}
else
{
if(strcmp(cle,p->cle)==0)
{
q=p->suiv;
free(p);
}
else
{
q=p;
}
}
}
else
{
q=NULL;
}
return q;
}

1 réponse

D'abord, essaye de bien indenter ton code, s'il il était mieux indenté tu arriverais plus facilement à résoudre un problème! Ensuite, je te conseille d'aller voir un tutoriel sur les listes chainees ->"http://www.siteduzero.com/informatique/tutoriels/les-listes-chainees-2/manipuler-les-listes-chainees-1-2".
0
Rejoignez-nous