1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
//fearyourself: Il manque mais je suppose que tu l'as quelque part struct s;
typedef struct chainon {
char eti[eti_max]; //etiquette
struct s *cible; // cible de l'arc
struct chainon *suiv_arc; //pointe sur l'arc suivant
} arc,*parc;
typedef arc *liste;
typedef struct s{
int ef; //etat final (0/1)
int sommet; //numero du sommet
parc arc; //pointe sur la liste des arcs de l'etat
struct s *prec_etat; //pointe sur l'etat precedent
} som, *psom;
//suppression d'un sommet et de ses arcs
void supp_som(psom *prem_som,int n_som)
{
psom s,s_avant;
parc arc1,arc2;
s=(*prem_som);
s_avant=NULL;
if(s==NULL)
printf("La liste est deja vide\n");
else
{
//on cherche le sommet a supprimer
while((s!=NULL) && (s->sommet != n_som))
{
s_avant=s;
s=s->prec_etat;
}
//fearyourself: Faudrait tester s!=NULL!!!
if(s==NULL)
{
printf("L'element n'est pas dans la liste...\n");
}
else
{
//fearyourself: Ce test devient donc inutile...
//if(s->sommet==n_som)
// {
//on supprime le sommet de la liste
if(s_avant==NULL) //si c'est le 1er sommet de la liste
(*prem_som)=s->prec_etat;
else
s_avant->prec_etat = s->prec_etat;
//on veut supprimer les arcs du sommet
arc1=s->arc;
// free(s);
//suppression des arcs
while(arc1 != NULL)
{
arc2=arc1->suiv_arc;
free(arc1);
arc1=arc2;
}
free(s);
//} //test inutile maintenant
} //fin du else interne
}//fin du else externe
} |
Partager