Advertisement
FiddleComputers

Chained list essentials C

Jan 12th, 2020
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.33 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. struct noeud {
  6.    int donnees;
  7.    int id;
  8.    struct noeud *suivant;
  9. };
  10.  
  11. struct noeud *entree = NULL;
  12. struct noeud *curseur = NULL;
  13.  
  14. void afficherListe() {
  15.    struct noeud *ptr = entree;
  16.    printf("\n[ ");
  17.    
  18.    while(ptr != NULL) {
  19.       printf("(%d,%d) ",ptr->id,ptr->donnees);
  20.       ptr = ptr->suivant;
  21.    }
  22.    
  23.    printf(" ]");
  24. }
  25.  
  26. void insererPremier(int id, int donnees) {
  27.    struct noeud *lien = (struct noeud*) malloc(sizeof(struct noeud));
  28.    
  29.    lien->id = id;
  30.    lien->donnees = donnees;
  31.    
  32.    lien->suivant = entree;
  33.    
  34.    entree = lien;
  35. }
  36.  
  37. struct noeud* supprimerPremier() {
  38.  
  39.    struct noeud *tempLink = entree;
  40.    
  41.    entree = entree->suivant;
  42.    
  43.    return tempLink;
  44. }
  45.  
  46. int taille() {
  47.    int taille = 0;
  48.    struct noeud *curseur;
  49.    
  50.    for(curseur = entree; curseur != NULL; curseur = curseur->suivant) {
  51.       taille++;
  52.    }
  53.    
  54.    return taille;
  55. }
  56.  
  57. struct noeud* trouver(int id) {
  58.  
  59.    struct noeud* curseur = entree;
  60.  
  61.    if(entree == NULL) {
  62.       return NULL;
  63.    }
  64.  
  65.    while(curseur->id != id) {
  66.    
  67.       if(curseur->suivant == NULL) {
  68.          return NULL;
  69.       } else {
  70.          curseur = curseur->suivant;
  71.       }
  72.    }      
  73.    
  74.    return curseur;
  75. }
  76.  
  77. struct noeud* supprimer(int id) {
  78.  
  79.    struct noeud* curseur = entree;
  80.    struct noeud* previous = NULL;
  81.    
  82.    if(entree == NULL) {
  83.       return NULL;
  84.    }
  85.  
  86.    while(curseur->id != id) {
  87.  
  88.       if(curseur->suivant == NULL) {
  89.          return NULL;
  90.       } else {
  91.          previous = curseur;
  92.          curseur = curseur->suivant;
  93.       }
  94.    }
  95.  
  96.    if(curseur == entree) {
  97.       entree = entree->suivant;
  98.    } else {
  99.       previous->suivant = curseur->suivant;
  100.    }    
  101.    
  102.    return curseur;
  103. }
  104.  
  105. struct noeud* vider() {
  106.  
  107.    while(entree != NULL)
  108.    {
  109.       struct noeud *temp = supprimerPremier();
  110.       printf("\nValeur supprimee : ");
  111.       printf("(%d,%d) ",temp->id,temp->donnees);
  112.    }
  113. }
  114.  
  115. void trier() {
  116.  
  117.    int i, j, k, tempKey, tempData;
  118.    struct noeud *curseur;
  119.    struct noeud *suivant;
  120.    
  121.    int size = taille();
  122.    k = size ;
  123.    
  124.    for (i = 0 ; i < size - 1 ; i++, k--) {
  125.       curseur = entree;
  126.       suivant = entree->suivant;
  127.        
  128.       for (j = 1 ; j < k ; j++) {  
  129.  
  130.          if (curseur->donnees > suivant->donnees) {
  131.             tempData = curseur->donnees;
  132.             curseur->donnees = suivant->donnees;
  133.             suivant->donnees = tempData;
  134.  
  135.             tempKey = curseur->id;
  136.             curseur->id = suivant->id;
  137.             suivant->id = tempKey;
  138.          }
  139.            
  140.          curseur = curseur->suivant;
  141.          suivant = suivant->suivant;
  142.       }
  143.    }  
  144. }
  145.  
  146. void inverser(struct noeud** entree_ref) {
  147.    struct noeud* prev   = NULL;
  148.    struct noeud* curseur = *entree_ref;
  149.    struct noeud* suivant;
  150.    
  151.    while (curseur != NULL) {
  152.       suivant  = curseur->suivant;
  153.       curseur->suivant = prev;  
  154.       prev = curseur;
  155.       curseur = suivant;
  156.    }
  157.    
  158.    *entree_ref = prev;
  159. }
  160.  
  161. void main() {
  162.    insererPremier(1,10);
  163.    insererPremier(2,20);
  164.    insererPremier(3,30);
  165.    insererPremier(4,1);
  166.    insererPremier(5,40);
  167.    insererPremier(6,56);
  168.  
  169.    printf("Liste originelle : ");
  170.    
  171.    afficherListe();
  172.  
  173.    vider();
  174.    
  175.    printf("\nListe apres avoir supprime tous les elements : ");
  176.    afficherListe();
  177.    insererPremier(1,10);
  178.    insererPremier(2,20);
  179.    insererPremier(3,30);
  180.    insererPremier(4,1);
  181.    insererPremier(5,40);
  182.    insererPremier(6,56);
  183.    
  184.    printf("\nListe restoree : ");
  185.    afficherListe();
  186.    printf("\n");  
  187.  
  188.    struct noeud *foundLink = trouver(4);
  189.    
  190.    if(foundLink != NULL) {
  191.       printf("Element trouve : ");
  192.       printf("(%d,%d) ",foundLink->id,foundLink->donnees);
  193.       printf("\n");  
  194.    } else {
  195.       printf("Element pas trouve.");
  196.    }
  197.  
  198.    supprimer(4);
  199.    printf("Liste apres avoir supprimer un element : ");
  200.    afficherListe();
  201.    printf("\n");
  202.    foundLink = trouver(4);
  203.    
  204.    if(foundLink != NULL) {
  205.       printf("Element trouve : ");
  206.       printf("(%d,%d) ",foundLink->id,foundLink->donnees);
  207.       printf("\n");
  208.    } else {
  209.       printf("Element pas trouve.");
  210.    }
  211.    
  212.    printf("\n");
  213.    trier();
  214.    
  215.    printf("Liste apres tri des donnees: ");
  216.    afficherListe();
  217.    
  218.    inverser(&entree);
  219.    printf("\nListe apres inversion : ");
  220.    afficherListe();
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement