Salut,
bon vite fait en C , ton code retape. J'ai laisse tes commentaires en place, modifie quelque peu le nom des fonctions et procedures. Test it and if possible, enjoy it then

//*******************************
//Structures
//*******************************
//Structure noeud
typedef struct Node
{
Node *Prev;
Node *Next;
unsigned long Data;
}Node, *PNode;
//Structure liste
typedef struct DList
{
Node *Root; //adresse du premier noeud
unsigned long Size; //Nombre d'elements
}DList,*PDList;
//*******************************
//Signature des fonctions
//*******************************
DList *CreateDList();
const char InsertInDList (DList*, const unsigned long);
void FreeDList (DList** );
void printDList(DList*);
//*******************************
//utilisation
//*******************************
void testlist()
{
unsigned long toto=0;
PDList list;
system("cls");
printf("creation de la Liste\n");
system("Pause");
list=CreateDList();
if(list)
{
//test deux methode pour le nombre d'element
printf("Liste cree avec %ld element\n",list->Size);
//insert 10elements
printf("Insertion des elements\n");
system("Pause");
for(toto=0;toto<10;++toto)
{
//ajout un element
if(!InsertInDList(list,toto))printf("Erreur-Insertion element : %i",toto);
}
printDList(list);
printf("Efface la liste\n");
system("Pause");
ClearDList (&list);
printf("Fin avant sortie\n");
system("Pause");
}
}
/*******************************
//Codes de gestion
//*******************************
/*-------------------------------
Nouvelle liste
Renvoi un pointeur de type liste double
---------------------------------*/
DList *CreateDList()
{
PDList P_ListD = malloc(sizeof (DList));
if (P_ListD)
{//memoire alloué
//initialisation de la liste
P_ListD->Root = 0;
P_ListD->Size = 0;
}
else
fprintf (stderr, "Memoire insufisante\n");
return P_ListD;
}
/*-------------------------------
Insert un element
---------------------------------*/
const char InsertInDList (DList *P_ListD, const unsigned long Data)
{
if (P_ListD)
{//si pointeur sur liste non nul
//P_NoeudTemp nouveau noeud a insere
PNode P_NoeudTemp = malloc (sizeof (Node));
if(!P_NoeudTemp)
{
//set les data
P_NoeudTemp->Data = Data;
P_NoeudTemp->Prev = P_NoeudTemp->Next = 0;
if (!P_ListD->First)
//premiere insertion dans la liste
P_ListD->First = P_NoeudTemp;
else
{//recherche le noeud a inserer
//P_NoeudRecherche le noeud pour parcourir la liste setter au debut
PNode P_NoeudRecherche = P_ListD->First;
while(P_NoeudRecherche->Next)
//tant que le suivant n'est pas null
P_NoeudRecherche=P_NoeudRecherche->Next;
//remplace le noeud suivant
P_NoeudTemp->Prev=P_NoeudRecherche;
P_NoeudRecherche->Next=P_NoeudTemp;
}
//increment le nombre d'element
++P_ListD->Size;
}
else
{
fprintf (stderr, "Memoire insuffisante\n");
return 0;//failure, no item inserted
}
}
return 1;//success , one item inserted
}
/*-------------------------------
Efface la liste double
---------------------------------*/
void ClearDList (DList** P_ListD)
{ //efface la liste ** P_ListD car on doit modifier le pointeur de liste envoyé
if (P_ListD && *P_ListD)
{
//Efface les elements recursivement
while((*P_ListD)->First->Next)
{
(*P_ListD)->First->Prev = (*P_ListD)->First->Next;
(*P_ListD)->First->Next = (*P_ListD)->First->Next->Next;
free((*P_ListD)->First->Prev);
}
free((*P_ListD)->First);
//supprime la liste
free (*P_ListD);
*P_ListD = NULL;
}
}
/*-------------------------------
Affiche la liste sur la sortie standard
---------------------------------*/
void printDList(DList *liste)
{
unsigned long toto=0;
PNode PP;
if(!liste)return;
printf("Liste cree avec %ld element\n",liste->Size);
PP=liste->First;
while(PP)
{
printf("Element %d (valeur %ld) Adresse:%p\n\tAdresse prec:%p \n\tAdresse next:%p\n\n",(toto++),PP->Data,PP,PP->Prev,PP->Next);
PP=PP->Next;
}
printf ("\n");
}
J'espere avoir aide, salut
je suis heureux de faire partie d'une grande famille ...!