manipulation des listes chainées
Salut tous,
Eh bien je risque de poser quelques questions bien stupides (trop stupides en effet !), mais comme il le faut pour apprendre, allons-y, j'espère que vous serez nombreux à m'aider :calim2:
Bon je dois réaliser une liste chainée dont les éléments sont les suivant :
Code:
1 2 3 4 5 6 7
| typedef struct Element Element;
struct Element
{ char cin[10];
char *nom;
int age;
struct Element *suivant;
}; |
je veux en premier lieu créer une fonction qui fait l'ajout trié, c'est à dire : ajoute exactement dans la position où le nouvel élément dois être insérer, moi je fait :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| void ajoutrie(Element **liste, Element e)
{
// cas special pour la tête de la liste "liste"
if (liste == NULL || liste->cin >= e->cin)
{
e->suivant = suivant;
liste = e;
}
else
{
// localiser l'Element précedent au lieu d'insertion
Element* p = liste;
while (p->suivant!=NULL && p->suivant->cin < e.cin)
{
p = p->suivant;
}
e->suivant = p->suivant;
p->suivant = e;
}
} |
que le compilateur ne trouve pas très joli toutefois ! J'imagine qu'il a raison :D (bon j'ai pas encore fait le test sur une liste, mais lorsque j'ai compilé ça a indiqué beaucoup d'erreur de syntaxe que j'arrive pas à relever :oops:)
autre fonction que je veux réaliser est l'affichage et je fais :
Code:
1 2 3 4 5 6 7 8 9 10
| void afficher(Element **liste)
{
Element *p = liste;//ce pointeur nous servira pour parcourire la liste
while(p!=NULL)
{
printf("%s :\n",p.cin);
printf("%s :\n",p.nom);
printf("%d :\n",p.age);
p=p.suivant;//de quoi avancer une case
}; |
j'imagine quand même que celle là je l'ai correcte, non ? 8O
Bon y a trois autres fonctions, mais on en discutera une fois j'aurai essayé, voilà, merci à tous ;)