lonsomehell

Tri liste

May 19th, 2013
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.10 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct liste liste;
  5. struct liste{
  6.     int value;
  7.     liste* suivant;
  8. };
  9. liste* creer(){
  10.     liste *l;
  11.     l=malloc(sizeof(liste));
  12.     l->suivant=NULL;
  13.     return l;
  14. }
  15. void adjt(liste **l,int i){
  16.     liste *temp;
  17.     temp=creer();
  18.     temp->value=i;
  19.     if(!(*l))
  20.         *l=temp;
  21.     else{
  22.         temp->suivant=(*l);
  23.         (*l)=temp;
  24.     }
  25. }
  26. void adjq(liste **l,int i){
  27.     liste *temp;
  28.     temp=creer();
  29.     temp->value=i;
  30.     if(!(*l))
  31.         *l=temp;
  32.     else{
  33.         liste *courant=*l;
  34.         while(courant->suivant)
  35.             courant=courant->suivant;
  36.         courant->suivant=temp;
  37.     }
  38. }
  39. void suppt(liste **l){
  40.     if(*l){
  41.         liste *courant =*l;
  42.         *l=(*l)->suivant;
  43.         free (courant);
  44.     }
  45. }
  46. void suppq(liste **l){
  47.     if(*l){
  48.         if(!(*l)->suivant){
  49.             free(*l);
  50.             *l=NULL;
  51.         }
  52.         else{
  53.             liste *courant =(*l);
  54.             while(courant->suivant->suivant)
  55.                 courant=courant->suivant;
  56.             free (courant->suivant);
  57.             courant->suivant=NULL;
  58.         }
  59.     }
  60. }
  61. liste* tri(liste *l){
  62.     liste *new=l;
  63.     liste *courant=l->suivant;
  64.     if(l){
  65.         new->suivant=NULL;
  66.         liste *temp1,*temp2;
  67.         int c=0;
  68.         while(courant){
  69.             if(courant->value<=new->value){
  70.                 temp1=courant->suivant;
  71.                 courant->suivant=new;
  72.                 new=courant;
  73.                 courant=temp1;
  74.             }
  75.             else if(!new->suivant){
  76.                 new->suivant=courant;
  77.                 courant=courant->suivant;
  78.                 new->suivant->suivant=NULL;
  79.             }
  80.             else{
  81.                 temp2=new;
  82.                 while(temp2->suivant){
  83.                     if(temp2->suivant->value>courant->value){
  84.                         temp1=courant->suivant;
  85.                         courant->suivant=temp2->suivant;
  86.                         temp2->suivant=courant;
  87.                         courant=temp1;
  88.                         break;
  89.                     }
  90.                     else{
  91.                         temp2=temp2->suivant;
  92.                     }
  93.                 }
  94.                 if(!temp2->suivant){
  95.                     temp1=courant->suivant;
  96.                     courant->suivant=NULL;
  97.                     temp2->suivant=courant;
  98.                     courant=temp1;
  99.                 }
  100.             }
  101.         }
  102.     }
  103.     return new;
  104. }
  105. int length(liste *l){
  106.     int i=0;
  107.     while(l){
  108.         i++;
  109.         l=l->suivant;
  110.     }
  111.     return i;
  112. }
  113. void affiche(liste *l){
  114.     while(l){
  115.         printf("->%d //%p\n",l->value,l);
  116.         l=l->suivant;
  117.     }
  118. }
  119. int main(){
  120.     liste *l;
  121.     adjt(&l,5);
  122.     adjq(&l,1);
  123.     adjq(&l,5);
  124.     adjq(&l,2);
  125.     l=tri(l);
  126.     affiche(l);
  127.     return 0;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment