Bonjour a tous , voici le probleme : je dois faire un programme triant une liste de nombre de 10 caracteres (caracteres car s'exprime dans n'importe quelle base).
C'est une liste chainée. Voila le principe :

nombres a trier :

48081 97342 90287 90583 53202 65215 48801

premiere etape :
On cherche tous les nombres qui se terminent par 0, on les mets dans le seau 0.Dans cette etape , le seau 0 est vide car il n y apas de nombres se terminant par 0

ensuite on chertche les nombres qui se terminent par 1, on les met dans le seau 1. Donc 48081 et 48801 sont dans ce seau.

et ainsi de suite jusqu au seau 9

On relie ces seaux entre eux dans l ordre, on obtient la liste triée par le dernier nombre :

48081 48801 97342 53202 90583 65215 90287

On recommence avec l avant dernier nombre et ainsi de suite jusqu a obtenit la liste triée entierement.

La representation des seaux est fait par un tableau ou le nombre de lignes = la base.

Voici le programme :

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
 
#include <stdio.h>
#include <stdlib.h>
 
 typedef struct elem {
                        char valeur[11];
                        struct elem *suivant;
                        }element;
 typedef element* liste;
 
liste ajoutqueue(liste l)
{
 
      element *e;
      element *nouv;
      nouv=(element*)malloc(sizeof(element));
      printf ("Entrer la nouvelle valeur a ajouter\n");
      scanf ("%s",nouv->valeur);
      nouv ->suivant=NULL;
      if (l!=NULL)
      {
         e=l;
         while (e != NULL)
               e=e->suivant;
         e->suivant =nouv;      
      }
      else
          l=nouv;
      return l; 
}
 
 
liste tri(liste l,int b)
{
    int i,j;
    liste A[b];
    element *e;
    element *f;
 
    for (i=0;i<10;i=i+1)
    {
        for (i=0;i<b;i=i+1)
        {
            A[i]=NULL;
        }
        e=l;
        while (e->suivant !=NULL)
        {
            element *nouv;  
            nouv=(element*)malloc(sizeof(element));  
            memcpy(nouv->valeur,e->valeur,11*sizeof(char));
            nouv->suivant=NULL;
            j=e->valeur[i];
            if (A[j] != NULL)
            {
                f=A[j];
                while (f->suivant != NULL)
                    f=f->suivant;
                f->suivant=nouv;
            }
            else  
            {
                memcpy(A[j]->valeur,e->valeur,11*sizeof(char));
                A[j]->suivant=NULL;
            }
            e=e->suivant;
        }
        l=A[0];
        e=l;
        for (i=0;i<b-1;i=i+1)
        {
            while (e->suivant!=NULL)
            {
                  e=e->suivant;
            }
            e->suivant=A[i+1];
        }
    }
    return l;
}   
 
int main()
{   
    int choix,i,b;
    element *l;
    element *e;
    e=l;
    printf("Choisir la base\n");
    scanf("%d",&b);
    liste A[b];
 
    for (i=0;i<b;i=i+1)
        {
            A[i]=NULL;
        }
 
    do 
    {
       printf("1. Ajout d'une nouvelle valeur\n");
       printf("2. Affichage des valeurs entrées\n");
       printf("3. Trier la liste\n");
       printf("4. Quitter\n");
       printf("Entrez votre choix :\n");
       scanf("%d",&choix);
       switch(choix)
       {
           case 1 :
           {
               l=ajoutqueue(l);  
               break;  
           }
           case 2 :
           {
                e=l;
                while (e->suivant != NULL)
                {
                      printf("%s",e->valeur);
                      e=e->suivant;     
                }
                break;
           }
           case 3 :
           {
                l=tri(l,b); 
                break;   
           }
       }
    }
    while (choix !=4);                    
 
return 0;
}
et les erreurs :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
In function `ajoutqueue': 
ligne 26 : syntax error before "else" 
 
In function `tri': 
ligne 46 : incompatible types in assignment 
ligne 58 : incompatible types in assignment 
ligne 59 : syntax error before '(' token 
 
In function `main':
ligne 115 : syntax error before '(' token
Voila tt , si ils manquent des infos demandez ,je repondrai rapidement mais aidez moi car j ai beau chercher je ne vois pas !! mais bon je debutes...

Merci !