Je ne vois pas......

mansas87 Messages postés 25 Statut Membre -  
mansas87 Messages postés 25 Statut Membre -
Bonjour,
aidez moi SVP a voir ce qui ne va pas dans cette fonction.J'ai essayé d'ecrire une fonction qui permet d'inserer une valeur dans une liste chainée mais ça ne marche pas et je n'arrive pas à deceler l'erreur.

struct liste *inserer(struct liste * tet ,int k,int val)
//k represente la position à laquelle je veux faire l'inserssion et val la valeur que je veux inserer
{
struct liste *p=tet,*elt=0; int i=1;
while(i<k)
{ p=p->svt;i++}
elt=(struct liste*)malloc(sizeof(struct liste));
elt->a=val;
elt->svt=p;
p=elt;
return tet;
}

5 réponses

Mahmah Messages postés 497 Statut Membre 125
 
Bonjour,

Les cas k=0 et k=1 sont identiques.

p=elt. Cette ligne n'a aucun effet. (Mise à jour d'une variable local juste avant de quitter)

return tet; Même si la tête a changé ?

M.
0
mansas87
 
merci pour l'essai mais j'ai pas compris p=elt;n'a aucun effet.moi je pense que c'est un nouvel element qui est rajouté à la liste donc mais apres la fonction cet element sera en vie....si t'as d'autres explications j'attebds.merci ensore
0
Mahmah Messages postés 497 Statut Membre 125
 
p n'est pas un élément de la liste mais un pointeur supplémentaire qui référence un des éléments de la liste.

avec '*' un élément de la liste:

après le while:
****
 ^
 p



à la fin de la fonction:
****
 ^
elt (élément alloué)
 ^
 p (pointeur vers un élément)



après la fonction:
****
 ^
elt (élément alloué)


La liste n'a jamais été rompue, ton nouvel élément existe au delà et désigne par son suivant un des élément de la liste.

Si je ne me trompe pas :-S

Prends un bout de papier et dessine ta liste puis chaque opération, ça marche toujours ;-)

M.
0
mansas87 Messages postés 25 Statut Membre
 
ok maintenant si t'as solutions passe les moi.
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mahmah Messages postés 497 Statut Membre 125
 

E0->E1->E2->E3
     ^
     p



On veut mettre un nouvel élément E entre E1 et E2. Dans le contexte de la fonction on dira entre p et son suivant car on ignore l'état de la liste, le seul élément connu est celui pointé par P.

Je mets là le principe.
- Créer E. (ok)
- Mettre sa valeur. (ok)
- Donner un suivant à E. (oui mais là tu vas bloquer l'étape d'après si tu prends celui là)
- Dire au précédent de notre suivant que E est son nouveau suivant. (non)

Une autre chose qui peut t'aider. Pour être un élément de la liste il faut que quelqu'un pointe sur nous et que l'on pointe sur quelqu'un. Je veux un réponse pour ces deux question.
1) Quelles sont les étapes pour intégrer E dans la liste ? (En raisonnant avec les Ei et non plus P)
2) Pour tous les Ei figurant dans ceux qui auront été utiles à ton raisonnement précédent, comment les désigner à l'aide de P ?

M.

(nan nan, le but c'est de comprendre)
0
mansas87 Messages postés 25 Statut Membre
 
ok je vois mais je prefère que tu me donne le code source
0