Liste chaînée , exercice simple et perte d'élément
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
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 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);
}
} |
petite précision j'ai pas mal passé de temps sur gdd...
mais c'est mes connaissances qui montrent leurs limites