Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.57 KB | None | 0 0
  1. #include "linkedList.h"
  2.  
  3. #include <stdlib.h>
  4.  
  5. struct _element {
  6.     void* data;
  7.     int key;
  8.  
  9.     element next_element;
  10.     element prev_element;
  11. };
  12.  
  13. struct _list {
  14.     int size;
  15.  
  16.     element head;
  17.     element tail;
  18. };
  19.  
  20. list createList () {
  21.     list new_list;
  22.  
  23.     new_list = (list)malloc(sizeof(list));
  24.  
  25.     new_list->head = NULL;
  26.     new_list->tail = NULL;
  27.  
  28.     new_list->size = 0;
  29.  
  30.     return new_list;
  31. }
  32.  
  33. void destroyList (list l) {
  34.     element temp;
  35.    
  36.  
  37.     if ((temp = l->head->next_element) == NULL) {
  38.         free(l->head);
  39.         free(l);
  40.  
  41.         return;
  42.     }
  43.  
  44.     while (temp != NULL) {
  45.         temp->next_element->prev_element = l->head;
  46.         temp->next_element = NULL;
  47.         temp->prev_element = NULL;
  48.  
  49.         free(temp);
  50.  
  51.         temp = l->head->next_element;
  52.     }
  53.  
  54.     free(l->head);
  55.  
  56.     free(l);
  57. }
  58.  
  59. element listSearch (list l, int key) {
  60.     element temp;
  61.  
  62.     temp = l->head;
  63.  
  64.     while (temp != NULL) {
  65.         if (temp->key == key) {
  66.             return temp;
  67.         }
  68.  
  69.         temp = temp->next_element;
  70.     }
  71.  
  72.     if (temp == NULL) {
  73.         return NULL;
  74.     }
  75.  
  76. }
  77.  
  78. void deleteElement (list l, int key) {
  79.     element to_delete;
  80.  
  81.     if (l->head->key == key) {
  82.         l->head = to_delete->next_element;
  83.         to_delete->next_element->prev_element = NULL;
  84.     }
  85.     else if (l->tail->key == key) {
  86.         l->tail = to_delete->prev_element;
  87.         to_delete->prev_element->next_element = NULL;
  88.     }
  89.     else {
  90.         to_delete = listSearch(l, key);
  91.  
  92.         to_delete->prev_element->next_element = to_delete->next_element;
  93.         to_delete->next_element->prev_element = to_delete->prev_element;
  94.     }
  95.  
  96.     free(to_delete);
  97.     l->size--;
  98.  
  99. }
  100.  
  101. void elementInsertNext (list l, void* data, int key) {
  102.     element new_element, location;
  103.  
  104.     new_element = (element)malloc(sizeof(element));
  105.  
  106.     if (l->head->key == key) {
  107.         l->head->next_element->prev_element = new_element;
  108.         l->head->next_element = new_element;
  109.     }
  110.  
  111.     else if (l->tail->key == key) {
  112.         l->tail->next_element = new_element;
  113.         l->tail = new_element;
  114.     }
  115.  
  116.     else {
  117.         location = listSearch(l, key);
  118.  
  119.         location->next_element->prev_element = new_element;
  120.         location->next_element = new_element;
  121.     }
  122.  
  123.     l->size++;
  124.  
  125. }
  126.  
  127. void elementInsertPrev (list l, void* data, int key) {
  128.     element new_element, location;
  129.  
  130.     new_element = (element)malloc(sizeof(element));
  131.  
  132.     if (l->head->key == key) {
  133.         l->head->next_element = new_element;
  134.         l->head = new_element;
  135.     }
  136.  
  137.     else if (l->tail->key == key) {
  138.         l->tail->prev_element->next_element = new_element;
  139.         l->tail->prev_element = new_element;
  140.     }
  141.  
  142.     else {
  143.         location = listSearch(l, key);
  144.  
  145.         location->prev_element->next_element = new_element;
  146.         location->prev_element = new_element;
  147.     }
  148.  
  149.     l->size++;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement