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
|
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#define MAX 30
typedef struct Employe
{
char nom[MAX];
int salaire;
struct Employe* suivant;
}Employe;
typedef Employe* Liste;
void afficheEmploye(Employe* e)
{
if (e)
printf("%s\t%d\n",e->nom,e->salaire);
else
printf("mauvaise allocation\n");
}
void afficheListe(Liste L)
{
while (L)
{
afficheEmploye(L);
L=L->suivant;
}
}
void ajouteEmploye(Liste *L,int salaire,char nom[MAX])
{
//ajoute un employe en tete de liste
Liste tmp = (Liste)malloc(sizeof(Employe));
if (!tmp) return;
tmp->salaire = salaire;
strncpy(tmp->nom,nom,MAX-1);
tmp->nom[MAX]='\0';
tmp->suivant = *L;
*L = tmp;
}
void SoustraitEmploye(Liste *L,char nom[])
{
if (strcmp((*L)->nom,nom)==0)
{
*L=(*L)->suivant;
}
else
{
Liste tmp2,tmp = *L;
while (strcmp(tmp->nom,nom)!=0)
{
tmp2 = tmp;
tmp=tmp->suivant;
}
tmp2->suivant=tmp->suivant;
free(tmp);
}
}
Liste Tri(Liste* L)
{
Liste trie = malloc(sizeof(Employe));
Liste min = *L;
Liste tmp = *L;
if (!(*L)->suivant)
{
return *L;
}
while (tmp)
{
if (tmp->salaire < min->salaire)
{
min = tmp;
}
tmp = tmp->suivant;
}
//trie = min;
strncpy(trie->nom,min->nom,MAX);
trie->salaire=min->salaire;
SoustraitEmploye(L,min->nom);
trie->suivant= Tri(L);
return trie;
}
int main()
{
char nom[5]="jean";
Liste L = NULL;
ajouteEmploye(&L,89,nom);
ajouteEmploye(&L,780,"fred");
ajouteEmploye(&L,678,"pierre");
ajouteEmploye(&L,567,"alain");
ajouteEmploye(&L,134,"nicolas");
afficheListe(L);
Liste trie=L;
trie=Tri(&trie);
free(L);
afficheListe(trie);
return 0;
} |
Partager