Bonsoir, je sollicite une fois encore de votre aide pour un problème de chaînage sur une liste moins classique.
Je vous expose mon problème:
j'ai une simple liste chaîné initialisée le plus simplement possible,
une fonction d'ajout et une fonction d'affichage.
cette liste ce différencie sur l'insertion, je m'explique:
en effet au lieu d'ajouter un l'élément a la fin, au début ou au « next » j'insère à la place de l'élément courant.(je prend l'élément courant je le met au next de l'élément a inserer et je remplace le courant par l'élément a insérer)
lors ce que j'ajoute des l'élément dans un ordre trié (a croissant) il n'y a pas de problème, mais lors ce que j'ajoute en désordre je perd tous les l'élément précédent l'élément ajouté.
je pense que ça vient du *p ) *p->next qui efface les l'élément précédent, mais je ne trouve pas de solution, je vous remercie d'avance
mon code
petite précision j'ai pas mal passé de temps sur gdd...
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 #include<stdio.h> #include<stdlib.h> typedef struct list { struct list *next; int a; int b; }list; typedef list s_list; void inserer(s_list **l,int a,int b) { if(*l==NULL) { s_list *s = malloc(sizeof(s_list)); s->next = NULL; s->a = a; s->b = b; *l = s; } else { while(*l != NULL) { if((*l)->a == a) { ((*l)->b += b);break; } if((*l)->a > a && (*l)->next == NULL) { s_list *s = malloc(sizeof(s_list)); s->next = NULL; s->a = a; s->b =b; (*l)->next = s;break; } if((*l)->a < a) { s_list *s = malloc(sizeof(s_list)); s->next = *l; s->a = a; s->b =b; *l = s;break; } else { *l = (*l)->next; } } } } void afficher(s_list *l) { while(l) { printf("%dX^%d\n",l->b, l->a); l = l->next; } } int main(int argc, char *argv[]) { s_list *l= NULL; int a = 0; int b = 0; while(1) { printf("un poly ?\n"); scanf("%d %d",&b,&a); inserer(&l,a,b); afficher(l); } }
mais c'est mes connaissances qui montrent leurs limites
Partager