Bonjour, bonsoir
je suis en train d'implémenter une liste doublement chaînée.
J'ai pour cela un certain nombre de structure, mais je n'arrive pas à coder ce que je veux faire, ou plutôt je ne sais pas comment faire.
Nous avons une tête de lecture dans cette liste.
1 -Je crée une cellule
2- Je met la valeur voulu dans cette nouvelle cellule
3- Je dois faire en sorte que l'élément suivant de la cellule crée soit la cellule tête; et l'élément précédent est l'ancien élément précédant la tête.
Voilà mes structures non protégé donc dans le .h cette fois.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| typedef struct unELEMENT {
int val;
char nom[TAILLE_MAX];
}ELEMENT;
typedef struct uneCEL
{
ELEMENT e; //élément courant
struct uneCEL *suiv;//pointeur sur élément suivant
struct uneCEL *prec;//pointeur sur élément précédent
}CEL;
typedef struct uneLISTE {
CEL *tete; //pointeur de tete sur une cellule
}LISTE;
typedef LISTE* LDC; |
Et je dois donc construire ici la fonction correspondant à ce prototype.
void ajoutElemAvant(LDC* l, ELEMENT e1);
qui réalise donc les étapes que j'ai décrites plus haut si je ne me trompe pas.
Voilà un début de fonction qui traire un cas particulier.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| void ajoutElemAvant(LDC *l, ELEMENT e1)
{
CEL* maCell=malloc(sizeof(CEL));
maCell->e=e1;
if(estVideListe(*l))
{
maCell->suiv=NULL;
maCell->prec=NULL;
(*l)->tete=maCell;
}
else
// ........
} |
EDIT:
J'ai aussi un autre petit soucis, un warning que je n'arrive pas à corriger et qui me fait merder l'exécution, je ne rentre même pas dans la fonction lorsque je la teste.
Je déclare un élément ELEMENT el
Ensuite, j'ai donné des valeurs el.val = 10; ça c'est ok
Mais quand je fais el.nom[TAILLE_MAX]="Bonjour"
J'obtiens le warning qui me fait assingment makes pointer from integer without a cast sur la ligne. Et j'avoue que je ne comprends rien...
Partager