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
| #include <stdio.h>
#include <string.h>
#include<stdlib.h>
#include <malloc.h>
typedef struct liste
{
char nom[30];
int num_ref;
struct liste *suiv;
}element;
typedef element *nv_type;
nv_type creer_premier(char *nom, int num_ref);//fct pour créer le premier élément
nv_type inserer(char *nom,int num_ref,nv_type premier);
void vider(nv_type premier);//pour liberer la memoire allouée
void main()
{
nv_type premier;//pointeur vers le premier élément
char nom[30],reponse='n';
int num_ref;
printf("entrez le nom du produit\n");
scanf("%s",nom);
fflush(stdin);//vider le tampon
printf("entrez la référence\n");
scanf("%d",&num_ref);
fflush(stdin);
premier=creer_premier(nom,num_ref);
printf("voulez-vous une autre saisie? ");
scanf("%c",&reponse);
while ((reponse=='o') || (reponse=='O'))
{
printf("entrez le nom du produit\n");
scanf("%s",nom);
fflush(stdin);
printf("entrez la référence\n");
scanf("%d",&num_ref);
fflush(stdin);
premier=inserer(nom,num_ref,premier);
printf("voulez-vous une autre saisie? ");
scanf("%c",&reponse);
fflush(stdin);
}
vider(premier);
}
nv_type creer_premier(char *nom, int num_ref)
{
nv_type debut;
debut=(nv_type)malloc(sizeof(element));
strcpy(debut->nom,nom);
debut->num_ref=num_ref;
debut->suiv=NULL;
return debut;//retourner un pointeur vers le premier élément
}
nv_type inserer(char *nom,int num_ref,nv_type premier)
{
nv_type courant,suivant,precedent;
int dernier=1;//pour indiquer si le nv élément doit être inseré à la fin de la liste
courant=(nv_type)malloc(sizeof(element));
strcpy(courant->nom,nom);
courant->num_ref=num_ref;//remplir les champs du nv élément
if(num_ref<(premier->num_ref))//s'il doit être inseré au debut de la liste
{
courant->suiv=premier;
premier=courant;
}
else
{
precedent=premier;
suivant=precedent->suiv;
while(suivant!=NULL)
{
if(num_ref< suivant->num_ref )
{
precedent->suiv=courant;// pointer vers le vn élément
courant->suiv=suivant;
dernier=0;//mettre dernier à zéro pour indiquer l'insertion du nv
break;
}
precedent=suivant;
suivant=suivant->suiv;
}
if(dernier==1)//cas où on doit l'inserer à la fin
{
precedent->suiv=courant;
courant->suiv=NULL;
}
}
return premier;
}
void vider(nv_type premier)
{
nv_type courant,suivant;
courant=premier;
suivant=courant->suiv;
while(suivant!=NULL)
{
free(courant);
courant=suivant;
suivant=suivant->suiv;
}
free(courant);//dernier élément
} |
Partager