Problem de liste chaine du C

Fermé
lucie - 14 août 2005 à 16:46
 behovic - 9 juin 2007 à 02:07
bonjour:
j'ai un problem du liste chainé:
effacer le premier element de la liste ************************************************
fichier liste.h :

typedef struct Tcell{
char lt;
int pt;
struct Tcell *next;

}TCELL,* PTCELL;

void print_list(PTCELL l);
void free_first(PTCELL head);
**************************************************
fichier liste.c :

#include <stdio.h>
#include "liste.h"

int main()
{/*definir la liste chainee*/

PTCELL liste1=(PTCELL)malloc(3*sizeof(TCELL));
liste1->lt='a';
liste1->pt=1;
liste1->next=liste1+1;//donne l address de prochaine
liste1->next->lt='b';
liste1->next->pt=2;
liste1->next->next=liste1+2;
liste1->next->next->lt='c';
liste1->next->next->pt=3;
liste1->next->next->next=NULL;

print_list(liste1);//imprimer la liste

PTCELL *l=liste1;
free_first(liste1);
print_list(liste1);
return 0;
}

************************************
fichier free_first.c :

void free_first(PTCELL head1)
{
PTCELL head2;
head2=head1;
head1=(&head1).next;
free(head2);
}
*****************************************
le resultat n'est pas bon :

[(a,1)(b,2)(c,3)]
[(,1)(b,2)(c,3)]
*********************************
en revanche :
fichier free_first.c :

void free_first(PTCELL *head)
{
PTCELL list;
list=*head;
head=(&head).next;
free(list);
}

**********************************
le resultat est bon :

[(a,1)(b,2)(c,3)]
[(b,2)(c,3)]

pourquoi le pointeur du pointeur est obligatoir ,merci bp bp :-)
A voir également:

2 réponses

je corrige une error:

en revanche :
fichier free_first.c :

void free_first(PTCELL *head)
{
PTCELL list;
list=*head;
*head=(&(*head)).next;
free(list);
}
0
slt;
voila la fonction comment tu peut supprimer un element ds la liste si ta des problemes envoyer moi .....

void SupprimerPersonnesListe()
{
char *nom;
ppers pre, p = DL ;

if(p == NULL)
{
printf("\n\t liste vide") ;
return ;
}

nom = SaisieStr("entrer le nom a supprimer");

if(strcmp(p->Nom,nom) == 0)
{
DL = p->svt;

free(p->Nom);
free(p);
return ;
}

pre = p ;
p = p->svt ;

while(p != NULL)
{
if(strcmp(p->Nom,nom) == 0)
{
pre->svt = p->svt ;
free(p->Nom);
free(p);
return ;
}
pre = p ;
p = p->svt ;
}
printf("\n\t >>> Element non trouve : Aucune supression\n") ;
}
0