Merci, Verdoux, tu as été plus rapide que moi. Pour le coup de preinsert(), je l'avais vu, mais pour detection, il a fallu que j'exécute le programme.
Voici donc ce que je te propose, Evadream :
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
typedef struct _Article {
struct _Article* suivant;
char* nom;
char* ref;
double prix;
int reste;
} Article;
typedef struct _ListeArticle {
Article* tete;
Article* queue;
} ListeArticle;
ListeArticle* creerListe();
Article* creer();
Article* detection(ListeArticle* liste, char* nom);
void inserer (ListeArticle* liste, Article* o);
void preinsert(Article* t, Article* o, ListeArticle* liste);
void affiche (ListeArticle* liste);
void main()
{
ListeArticle* liste = creerListe();
Article* objet;
int i = 0;
char rep = 'o';
char buffer[255];
printf("Creation d'une liste chainee\n" );
getch();
//while (rep == 'o') {
while (i < 5) {
objet = creer();
//clrscr();
printf("Donner son nom : " );
scanf(" %s", buffer);
objet->nom = strdup(buffer);
inserer(liste, objet);
i++;
//printf("\ncontinuer ? :" );
//scanf(" %c", &rep);
}
getch();
affiche(liste);
getch();
}
ListeArticle* creerListe()
{
return (ListeArticle*) calloc(1, sizeof(ListeArticle));
}
Article* creer()
{
Article* objet = (Article*) malloc(sizeof(Article));
if (objet == NULL) {
printf("Probleme d'allocation memoire !" );
getch();
}
objet->nom = NULL;
objet->ref = NULL;
objet->prix = 0.0;
objet->reste = 0;
objet->suivant = NULL;
return objet;
}
void preinsert(Article* t, Article* o, ListeArticle* liste)
{
if (t != NULL) {
o->suivant = t->suivant;
t->suivant = o;
if (liste->queue == t) {
liste->queue = o;
}
}
}
Article* detection(ListeArticle* liste, char* nom)
{
Article* cursor = liste->tete;
Article* next = cursor;
while (next != NULL && strcmp(next->nom, nom) < 0) {
cursor = next;
next = next->suivant;
}
return cursor;
}
void inserer(ListeArticle* liste, Article* o)
{
Article* cursor;
if (liste->tete == NULL) {
liste->tete = o;
liste->queue = o;
return;
}
cursor = detection(liste, o->nom);
if (cursor != NULL) {
preinsert(cursor, o, liste);
}
else {
liste->queue->suivant = o;
liste->queue = o;
}
}
void affiche(ListeArticle* liste)
{
Article* cursor = liste->tete;
clrscr();
printf("Etat du stock : \n" );
while (cursor != NULL) {
printf("\nNom : %s", cursor->nom);
//printf("\nReference : %s", cursor->ref);
//printf("\nPrix : %4.2lf", cursor->prix);
//printf("\nReste : %d", cursor->reste);
cursor = cursor->suivant;
}
printf("\nFin du stock\n\n" );
getch();
}