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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
typedef type_case* pointeur_case;
J'ai aussi créé une procédure pour insérer mes cases au bon endroit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
	ptr_courant = ptr_courant->suivant;
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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