FiddleComputers

Doubly linked list essentials C

Jan 12th, 2020
139
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. struct noeud {
  6.    int donnees;
  7.    int id;
  8.    
  9.    struct noeud *suivant;
  10.    struct noeud *precedent;
  11. };
  12.  
  13. struct noeud *premier = NULL;
  14.  
  15. struct noeud *dernier = NULL;
  16.  
  17. struct noeud *actuel = NULL;
  18.  
  19. int taille() {
  20.    int taille = 0;
  21.    struct noeud *actuel;
  22.    
  23.    for(actuel = premier; actuel != NULL; actuel = actuel->suivant){
  24.       taille++;
  25.    }
  26.    
  27.    return taille;
  28. }
  29.  
  30. void afficherAvant() {
  31.  
  32.    struct noeud *ptr = premier;
  33.    
  34.    printf("\n[ ");
  35.    
  36.    while(ptr != NULL) {        
  37.       printf("(%d,%d) ",ptr->id,ptr->donnees);
  38.       ptr = ptr->suivant;
  39.    }
  40.    
  41.    printf(" ]");
  42. }
  43.  
  44. void afficherDerriere() {
  45.  
  46.    struct noeud *ptr = dernier;
  47.    
  48.    printf("\n[ ");
  49.    
  50.    while(ptr != NULL) {    
  51.    
  52.       printf("(%d,%d) ",ptr->id,ptr->donnees);
  53.        
  54.       ptr = ptr ->precedent;
  55.      
  56.    }
  57.    
  58. }
  59.  
  60. void insererPremier(int id, int donnees) {
  61.  
  62.    struct noeud *lien = (struct noeud*) malloc(sizeof(struct noeud));
  63.    lien->id = id;
  64.    lien->donnees = donnees;
  65.    
  66.    if(premier == NULL) {
  67.       dernier = lien;
  68.    } else {
  69.       premier->precedent = lien;
  70.    }
  71.  
  72.    lien->suivant = premier;
  73.    
  74.    premier = lien;
  75. }
  76.  
  77. void insererDernier(int id, int donnees) {
  78.  
  79.    struct noeud *lien = (struct noeud*) malloc(sizeof(struct noeud));
  80.    lien->id = id;
  81.    lien->donnees = donnees;
  82.    
  83.    if(premier == NULL) {
  84.       dernier = lien;
  85.    } else {
  86.       dernier->suivant = lien;    
  87.      
  88.       lien->precedent = dernier;
  89.    }
  90.  
  91.    dernier = lien;
  92. }
  93.  
  94. struct noeud* supprimerPremier() {
  95.  
  96.    struct noeud *tempLien = premier;
  97.    
  98.    if(premier->suivant == NULL){
  99.       dernier = NULL;
  100.    } else {
  101.       premier->suivant->precedent = NULL;
  102.    }
  103.    
  104.    premier = premier->suivant;
  105.    return tempLien;
  106. }
  107.  
  108. struct noeud* supprimerDernier() {
  109.    struct noeud *tempLien = dernier;
  110.    
  111.    if(premier->suivant == NULL) {
  112.       premier = NULL;
  113.    } else {
  114.       dernier->precedent->suivant = NULL;
  115.    }
  116.    
  117.    dernier = dernier->precedent;
  118.    
  119.    return tempLien;
  120. }
  121.  
  122.  
  123. struct noeud* supprimer(int id) {
  124.  
  125.    struct noeud* actuel = premier;
  126.    struct noeud* precedentious = NULL;
  127.    
  128.    if(premier == NULL) {
  129.       return NULL;
  130.    }
  131.  
  132.    while(actuel->id != id) {
  133.        
  134.       if(actuel->suivant == NULL) {
  135.          return NULL;
  136.       } else {
  137.          precedentious = actuel;
  138.            
  139.          actuel = actuel->suivant;            
  140.       }
  141.    }
  142.  
  143.    if(actuel == premier) {
  144.       premier = premier->suivant;
  145.    } else {
  146.       actuel->precedent->suivant = actuel->suivant;
  147.    }    
  148.  
  149.    if(actuel == dernier) {
  150.       dernier = actuel->precedent;
  151.    } else {
  152.       actuel->suivant->precedent = actuel->precedent;
  153.    }
  154.    
  155.    return actuel;
  156. }
  157.  
  158. int insererApres(int id, int nouvId, int donnees) {
  159.    struct noeud *actuel = premier;
  160.    
  161.    if(premier == NULL) {
  162.       return 0;
  163.    }
  164.  
  165.    while(actuel->id != id) {
  166.    
  167.       if(actuel->suivant == NULL) {
  168.          return 0;
  169.       }
  170.       else {
  171.          actuel = actuel->suivant;
  172.       }
  173.    }
  174.    
  175.    struct noeud *nouvLien = (struct noeud*) malloc(sizeof(struct noeud));
  176.    nouvLien->id = nouvId;
  177.    nouvLien->donnees = donnees;
  178.  
  179.    if(actuel == dernier) {
  180.       nouvLien->suivant = NULL;
  181.       dernier = nouvLien;
  182.    } else {
  183.       nouvLien->suivant = actuel->suivant;        
  184.       actuel->suivant->precedent = nouvLien;
  185.    }
  186.    
  187.    nouvLien->precedent = actuel;
  188.    actuel->suivant = nouvLien;
  189.    return 1;
  190. }
  191.  
  192. void main() {
  193.    insererPremier(1,10);
  194.    insererPremier(2,20);
  195.    insererPremier(3,30);
  196.    insererPremier(4,1);
  197.    insererPremier(5,40);
  198.    insererPremier(6,56);
  199.  
  200.    printf("\nListe (premier au dernier) : ");  
  201.    afficherAvant();
  202.    
  203.    printf("\n");
  204.    printf("\nListe (dernier au premier) : ");
  205.    afficherDerriere();
  206.  
  207.    printf("\nListe, apres suppression du premier element : ");
  208.    supprimerPremier();        
  209.    afficherAvant();
  210.  
  211.    printf("\nListe, apres suppression du dernier element : ");  
  212.    supprimerDernier();
  213.    afficherAvant();
  214.  
  215.    printf("\nListe, apres insertion apres l'id 4: ");  
  216.    insererApres(4,7, 13);
  217.    afficherAvant();
  218.  
  219.    printf("\nListe, apres suppression de l'id 4 : ");  
  220.    supprimer(4);
  221.    afficherAvant();
  222. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×