Je me suis inspiré de ce codage de tri d'entier pour pouvoir l'effectuer avec des caractères, je cherche à trier des noms. Ne pouvant pas utiliser les deux dernières avec des caractères j'ai utilisé la fonction strcpy mais le résultat n'est pas ce que j'attendais .En effet, il place toujours le dernier nom en premier et après c'est un bordel. L'affichage des prénoms et numéro également sont mal placé. Ca fait plusieurs jours je suis bloqué, j'ai procédé à de nombreux test mais rien ne marche. Merci d'avance.
Code inspiré:Mon codage:
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 void trier(liste la) {// ici on va ranger les elements dans l'ordre croisssant avant de les afficher. liste temp, temp1, temp3; int min; for(temp=la ; temp!=NULL ; temp=temp->next) { temp3=temp; min=temp->val; for(temp1=temp->next ; temp1!=NULL ; temp1=temp1->next) { if(min > temp1->val) { temp3=temp1; // le 3è temporaire est l'adresse de l'élement où se trouve le minimum min=temp3->val; } } temp3->val=temp->val; //echange des 2 elements... temp->val=min; } }Voici ma structure, ma fonction ajouter et 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
16
17
18
19
20
21
22
23
24
25
26 void tri_stable(t_elem *prem) { t_elem *temp, *temp1, *temp2; char* min; for(temp=prem ; temp!=NULL ; temp=temp->suiv) { temp2=temp; min=temp->nom; for(temp1=temp->suiv ; temp1!=NULL ; temp1=temp1->suiv) { if(strcmp(temp1->nom,min)<0) { temp2=temp1; min=temp2->nom; } } strcpy(temp2->nom,temp->nom); strcpy(temp->nom,min); printf("\nNom : %s\n",temp->nom); printf("Prenom : %s\n",temp->prenom); printf("Numero : %s\n\n",(temp->numero)); } }
Structure :
Ajouter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 typedef struct elem { char nom[50]; //nom du client char prenom[50]; //prenom du client char numero[11]; //numero telephone du client struct elem *suiv; struct elem *prec; } t_elem;
Main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void ajout_debut(t_elem **prem, t_elem *e) //Ajouter un element au debut { if (*prem) //Si deja des elements { e->suiv=*prem; e->prec=NULL; (*prem)->prec=e; //Lien vers precedent *prem=e; } else //Si liste vide *prem=e; }
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 int main() { t_elem *premier=NULL; //premier element t_elem *e; //nouvel element int fin=0; int choix; printf("Operateur telephonique\n"); printf("------------------------\n"); while(fin!=1) { printf("1 Ajouter\n" "2 Afficher\n" "3 Trier\n"); scanf("%d",&choix); switch(choix) { case 1: // Ajouter init_elem(&e,premier); ajout_debut(&premier,e); break; case 2: // Afficher chaine //Afficher la liste : afficher_chaine(premier); break; case 3: tri_stable(premier); break; } } }
Partager