ben salut tout le monde jvoudré faire le tri d'une pile en structure chainé mais je cale ché po tro cmn faire

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
 
#include <stdio.h>
#include <stdlib.h>
 
typedef struct elem{
    int val; /* La donnee que notre pile stockera */
    struct elem *pred; /* Pointeur vers l'élément précédent de la pile */
} *pile;
 
 
pile empile(pile p, int val){
    pile q;
    q=(pile)malloc(sizeof(struct elem));
    if (q != NULL){
        q->val = val;
        q->pred = p;
        p = q;
    }
    return p;
}
 
int depile(pile p){
    int ret = -1;
    if (p != NULL){
        pile temp = p->pred;
        ret = p->val;
        free(p), p = NULL;
        p = temp;
    }
    return ret;
}
 
void pile_supp(pile p){
    while (p != NULL){
        depile(p);
    }
}
 
void affiche (pile p){
    if (p!=NULL){
        while (p!=NULL){
            printf("%d\n",p->val);
            p=p->pred;
        }
    }
    else
    printf("la pile est vide !\n");
 
}
 
pile tri_pile(pile p){
    pile travail=NULL;
    pile tri=NULL;
    int x,v;
    while (p!= NULL){
        x=depile(p);
        tri=empile(tri, x);
        if (p->val <= tri->val){
            x=depile(p);
            tri=empile(tri, x);
        }
        else{
            while((tri!= NULL)&&(p->val > tri->val)){
                v= depile(tri);
                travail=empile(travail, v);
 
                x=depile(p);
                tri=empile(tri, x);
            }
        }
    }
    return tri;
}
 
 
 
int main(){
    pile p=NULL;
    int aret, v, nb;
 
    printf("donnez la valeur de l'element d'aret \n");
    scanf("%d",&aret);
    nb=0;
    do {
    printf(" tapez l element de la pile != %d \n",aret);
        scanf("%d",&v);
        p=empile(p,v);
        printf("\n la pile 1 est \n");
        affiche(p);
        nb++;
    } while (v!= aret);
 
p=tri_pile(p);
affiche(p);
return 0;
}


------------------------------------------------------------
[EDIT]
Traduction (enfin je suppose) :
ben salut tout le monde jvoudré faire le tri d'une pile en structure chainé mais je cale ché po tro cmn faire
Salut tout le monde. Je voudrais faire le tri d'une pile utilisant une structure de liste chaînée, mais je cale. Je ne sais pas trop comment faire
[/EDIT]