Trap D  | assil a écrit :
 
 Merci pour votre aide mais même avec ça, le tri marche pas et pour les valeurs 7,2,4 et 3 j'ai eu comme résultat 0,2,3 et 4.
 
   |  
 Mon code fonctionne très bien chez moi, le voici en intégralite :
  Code :
 - #include <stdio.h>
 - #include <stdlib.h>
 - #include <conio.h>
 - typedef struct _elem
 - {
 - 	int prix;
 - 	struct _elem *precedent;
 - 	struct _elem *suivant;
 - } Element ;
 - void Tri_liste(Element** Entete)
 - {
 -      Element *courant;
 -      Element *ptr,*tmp;
 -   puts("Tri de la liste" );
 -      courant=*Entete;
 -    
 -      if (courant == NULL || courant->suivant==NULL)
 -        return;
 -    
 -    
 -      courant=courant->suivant;
 -      while(courant!=NULL)
 -      {
 -          ptr=courant;
 -          tmp=courant->precedent;
 -          courant=courant->suivant;
 -          while (tmp !=NULL && tmp->prix>ptr->prix)
 -          {
 -              tmp=tmp->precedent;
 -          }
 -    // on raccorde les elemnts qui entourent ptr
 -    ptr->precedent->suivant=ptr->suivant;
 -    if (ptr->suivant != NULL)
 -   	ptr->suivant->precedent = ptr->precedent;
 -    if (tmp == NULL)
 -    { // on ajoute en tete
 -     ptr->precedent = NULL ;
 -     (*Entete)->precedent = ptr;
 -     ptr->suivant = *Entete;
 -     *Entete = ptr;
 -    }
 -    else
 -    {
 -   	ptr->suivant = tmp->suivant;
 -   	if (tmp->suivant != NULL)
 -     tmp->suivant->precedent = ptr;
 -   	tmp->suivant = ptr;
 -   	ptr->precedent = tmp;
 -    }
 - 	}
 - }
 - Element *add(Element *Liste, int Val)
 - {
 - 	Element *elem = malloc(sizeof(*elem));
 - 	Element *tmp ;
 - 	if (elem == NULL)
 -         {
 -                 printf("Pb ajout de %d\n", Val);
 -   return Liste;
 -         }
 - 	elem->prix = Val;
 - 	elem->precedent = NULL;
 - 	elem->suivant = NULL;
 - 	if (Liste == NULL)
 -   Liste = elem;
 - 	else
 - 	{
 -   tmp = Liste;
 -   while(tmp->suivant != NULL)
 -   	tmp = tmp -> suivant;
 -   tmp->suivant = elem;
 -   elem->precedent = tmp;
 - 	}
 - 	return Liste ;
 - }
 - void my_free(Element *Liste)
 - {
 - 	Element *tmp = Liste;
 - 	Element *tmp2 ;
 - 	while(tmp != NULL)
 - 	{
 -   tmp2 = tmp->suivant;
 -   free(tmp);
 -   tmp = tmp2;
 - 	}
 - }
 - void printf_liste(Element *Liste)
 - {
 - 	Element *tmp = Liste;
 - 	Element *tmp1 = Liste;
 - 	puts("Affichage de la liste en sens direct" );
 - 	while(tmp != NULL)
 - 	{
 -   printf("%d\n", tmp->prix);
 -   tmp = tmp->suivant;
 - 	}
 - 	puts("Affichage de la liste en sens indirect" );
 - 	tmp = Liste;
 - 	while (tmp != NULL)
 - 	{
 -   tmp1 = tmp;
 -   tmp = tmp->suivant;
 - 	}
 - 	while(tmp1 != NULL)
 - 	{
 -   printf("%d\n", tmp1->prix);
 -   tmp1 = tmp1->precedent;
 - 	}
 - 	puts("\n" );
 - }
 - // Liste a sans element
 - void t1(void)
 - {
 - 	Element *Liste = NULL;
 - 	puts("Liste sans element" );
 - 	printf_liste(Liste);
 - 	Tri_liste(&Liste);
 - 	printf_liste(Liste);
 - 	my_free(Liste);
 - }
 - // liste avec un seul element
 - void t2(void)
 - {
 - 	Element *Liste = NULL;
 - 	puts("Liste avec un seul element" );
 - 	Liste = add(Liste, 2);
 - 	printf_liste(Liste);
 - 	Tri_liste(&Liste);
 - 	printf_liste(Liste);
 - 	my_free(Liste);
 - }
 - // liste avec un plusieurs elements tries
 - void t3(void)
 - {
 - 	Element *Liste = NULL;
 - 	puts("liste avec un plusieurs elements tries" );
 - 	Liste = add(Liste, 2);
 - 	Liste = add(Liste, 3);
 - 	Liste = add(Liste, 4);
 - 	Liste = add(Liste, 5);
 - 	Liste = add(Liste, 7);
 - 	printf_liste(Liste);
 - 	Tri_liste(&Liste);
 - 	printf_liste(Liste);
 - 	my_free(Liste);
 - }
 - // liste avec un plusieurs elements tries en sens inverse
 - void t4(void)
 - {
 - 	Element *Liste = NULL;
 - 	puts("liste avec un plusieurs elements tries en sens inverse " );
 - 	Liste = add(Liste, 7);
 - 	Liste = add(Liste, 5);
 - 	Liste = add(Liste, 4);
 - 	Liste = add(Liste, 3);
 - 	Liste = add(Liste, 2);
 - 	printf_liste(Liste);
 - 	Tri_liste(&Liste);
 - 	printf_liste(Liste);
 - 	my_free(Liste);
 - }
 - // liste avec un plusieurs elements 
 - void t5(void)
 - {
 - 	Element *Liste = NULL;
 - 	puts("liste avec un plusieurs elements quelconques" );
 - 	Liste = add(Liste, 7);
 - 	Liste = add(Liste, 10);
 - 	Liste = add(Liste, 4);
 - 	Liste = add(Liste, 9);
 - 	Liste = add(Liste, 4);
 - 	printf_liste(Liste);
 - 	Tri_liste(&Liste);
 - 	printf_liste(Liste);
 - 	my_free(Liste);
 - }
 - int main(void)
 - {
 - 	t1();
 - 	t2();
 - 	t3();
 - 	t4();
 - 	t5();
 - 	_getch();
 - 	return 0;
 - }
 
  |  
  EDIT C'est quoi ce problème d'indentation ? Les tab ne sont pas transformés en espaces ?
    Message édité par Trap D le 30-12-2012 à 10:55:59
  |