Liste chainée et pb de pointeur
bonjour,
J'essaye de créer une liste chainée en C, pour le moment rien de très compliqué : création de la liste, ajout de "cases" et affichage.
Tout d'abord j'ai créé une structure dans un fichier .h :
Code:
1 2 3 4
| typedef struct {
int info;
struct type_case* suivant;
}type_case; |
Puis pour manipuler plus facilement les pointeurs, j'ai créé un autre type
Code:
typedef type_case* pointeur_case;
J'ai aussi créé une procédure pour insérer mes cases au bon endroit
Code:
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
| void insertion_bonne_place(pointeur_case* adr_liste, int val){
/* variables locales */
pointeur_case ptr_courant;
pointeur_case case_precedente;
bool case_trouvee= FAUX;
/* Création de la nouvelle case */
pointeur_case nouvelle_case=(pointeur_case)malloc(sizeof(type_case));
/*Stockage de l'information */
nouvelle_case->info=val;
ptr_courant=*adr_liste;
case_precedente=NULL;
while((ptr_courant != NULL) && (!case_trouvee)){
if (ptr_courant->info < val){
case_precedente=ptr_courant;
ptr_courant = ptr_courant->suivant;
}else{
case_trouvee = VRAI;
}
}
if( ptr_courant == NULL){
if (*adr_liste == NULL){
/* liste vide, on a créé la première case */
*adr_liste = nouvelle_case;
nouvelle_case->suivant = NULL;
}else{
/* la liste n'est pas vide mais la nouvelle case doit être insérée à la fin */
case_precedente->suivant=nouvelle_case;
nouvelle_case->suivant=NULL;
}
}else{
if (case_precedente!=NULL){
/* insertion de la case au bon endroit dans la liste*/
case_precedente->suivant=nouvelle_case;
nouvelle_case->suivant=ptr_courant;
}else{
/* insertion au tout début , avant la première case */
*adr_liste= nouvelle_case;
nouvelle_case->suivant=ptr_courant;
}
}
} |
Mais j'ai des pb lors de la compilation : Warning assignment from incompatible pointer type pour les lignes de code suivantes :
Code:
ptr_courant = ptr_courant->suivant;
et
Code:
case_precedente->suivant=nouvelle_case;
, ainsi que toutes les autres qui leur ressemblent.
J'ai malheureusement une erreur aussi " syntax error at end of input " signalé à la fin de mon main
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include <stdio.h>
#include "fonction.h"
int main() {
pointeur_case liste;
initialisation_liste(&liste);
insertion_bonne_place(&liste,2);
insertion_bonne_place(&liste,20);
insertion_bonne_place(&liste,4);
insertion_bonne_place(&liste,1);
insertion_bonne_place(&liste,6);
afficher_liste(liste);
} |
Si vous pouvez m'aider , ça serait gentil , car la manipulation des listes chainées n'est que la base d'un projet que je dois faire, et j'avoue que je suis mal partie si je ne n'arrive pas à faire des choses simples.
Merci d'avance