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
|
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;
}
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);
}
}
} |
Partager