Advertisement
xXx_Fortis_xXx

Untitled

Apr 28th, 2018
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "linkedList.h"
  4.  
  5. typedef struct node{
  6.     int value;
  7.     struct node *next;
  8. } node;
  9.  
  10. typedef struct linkedList{
  11.     node *list;
  12. } linkedList;
  13.  
  14. node *initNode (void){
  15.     node *newNode = malloc(sizeof(node));
  16.     if (newNode == NULL){
  17.         fprintf(stderr, "New node memory allocation error\n");
  18.         return NULL;
  19.     }
  20.     newNode->next = NULL;
  21.     return newNode;
  22. }
  23.  
  24. linkedList *initLinkedList (void){
  25.     linkedList *newList = malloc(sizeof(linkedList));
  26.     if (newList == NULL){
  27.         fprintf(stderr, "New linkedList memory allocation error\n");
  28.         return NULL;
  29.     }
  30.     newList->list = NULL;
  31.     return newList;
  32. }
  33.  
  34. void pushBack (linkedList *L, node *n){
  35.     if (L->list == NULL){
  36.         L->list = n;
  37.         return;
  38.     }
  39.    
  40.     node *currNode = L->list;
  41.     while (currNode->next != NULL){
  42.         currNode = currNode->next;
  43.     }
  44.     currNode->next = n;
  45. }
  46.  
  47. void emplaceBack (linkedList *L, int v){
  48.     node *newNode = initNode();
  49.     newNode->value = v;
  50.    
  51.     pushBack(L, newNode);
  52. }
  53.  
  54. void pushFront (linkedList *L, node *n){
  55.     n->next = L->list;
  56.     L->list = n;
  57. }
  58.  
  59. void emplaceFront (linkedList *L, int v){
  60.     node *newNode = initNode();
  61.     newNode->value = v;
  62.    
  63.     pushFront(L, newNode);
  64. }
  65.  
  66. void insert (linkedList *L, node *n, int iter){
  67.     if (iter == 0){
  68.         pushFront(L, n);
  69.         return;
  70.     }
  71.     if (L->list == NULL){
  72.         fprintf(stderr, "Node insertion error\n");
  73.         return;
  74.     }
  75.    
  76.     node *currNode = L->list;
  77.     while (currNode->next != NULL && --iter){
  78.         currNode = currNode->next;
  79.     }
  80.     if (iter){
  81.         fprintf(stderr, "Node insertion error\n");
  82.         return;
  83.     }
  84.     n->next = currNode->next;
  85.     currNode->next = n;
  86. }
  87.  
  88. void emplace (linkedList *L, int v, int iter){
  89.     node *newNode = initNode();
  90.     newNode->value = v;
  91.     insert(L, newNode, iter);
  92. }
  93.  
  94. void popBack (linkedList *L){
  95.     if (L->list == NULL){
  96.         return;
  97.     }
  98.     node *currNode = L->list;
  99.     if (currNode->next == NULL){
  100.         free(currNode);
  101.         L->list = NULL;
  102.         return;
  103.     }
  104.     node *prevNode;
  105.     while (currNode->next != NULL){
  106.         prevNode = currNode;
  107.         currNode = currNode->next;
  108.     }
  109.     free(currNode);
  110.     prevNode->next = NULL;
  111.    
  112. }
  113.  
  114. void popFront (linkedList *L){
  115.     if (L->list == NULL){
  116.         return;
  117.     }
  118.     node *currNode = L->list;
  119.     if (currNode->next == NULL){
  120.         free(currNode);
  121.         L->list = NULL;
  122.         return;
  123.     }
  124.     L->list = currNode->next;
  125.     free(currNode);
  126. }
  127.  
  128. void erase (linkedList *L, int iter){
  129.     if (iter == 0){
  130.         popFront(L);
  131.         return;
  132.     }
  133.     extern node *get(linkedList *, int);
  134.     node *prevNode = get(L, iter - 1);
  135.     node *currNode = prevNode->next;
  136.     prevNode->next = currNode->next;
  137.     free(currNode);
  138.    
  139. }
  140.  
  141. void clear (linkedList *L){
  142.     node *currNode = L->list;
  143.     node *prevNode;
  144.     while (currNode != NULL){
  145.         prevNode = currNode;
  146.         currNode = currNode->next;
  147.         free(prevNode);
  148.     }
  149.     free(currNode);
  150.     L->list = NULL;
  151. }
  152.  
  153. node *get (linkedList *L, int iter){
  154.     node *currNode = L->list;
  155.     iter++;
  156.     while (currNode != NULL && --iter){
  157.         currNode = currNode->next;
  158.     }
  159.     if (iter){
  160.         fprintf(stderr, "Node getting error\n");
  161.         return NULL;
  162.     }
  163.     return currNode;
  164. }
  165.  
  166. int size (linkedList *L){
  167.     int s = 0;
  168.     node *currNode = L->list;
  169.     while (currNode != NULL){
  170.         s++;
  171.         currNode = currNode->next;
  172.     }
  173.     return s;
  174. }
  175.  
  176. node *getPrev (linkedList *L, node *n){
  177.     node *currNode = L->list;
  178.     node *prevNode = NULL;
  179.     while (currNode != NULL && currNode != n){
  180.         prevNode = currNode;
  181.         currNode = currNode->next;
  182.     }
  183.     if (currNode == NULL || prevNode == NULL){
  184.         fprintf(stderr, "Previous node getting error\n");
  185.         return NULL;
  186.     }
  187.     return prevNode;
  188. }
  189.  
  190. node *getNext (linkedList *L, node *n){
  191.     if (n->next == NULL){
  192.         fprintf(stderr, "Next node getting error\n");
  193.     }
  194.     return n->next;
  195. }
  196.  
  197. void printLinkedList (linkedList *L){
  198.     node *currNode = L->list;
  199.     while (currNode != NULL){
  200.         printf("%d ", currNode->value);
  201.         currNode = currNode->next;
  202.     }
  203.     printf("\n");
  204. }
  205.  
  206.  
  207.  
  208.  
  209. int main (int argc, char **argv){
  210.     linkedList *list = initLinkedList();
  211.     printLinkedList(list);
  212.     for (int i = 0; i < 10; i++){
  213.         emplaceBack(list, i);
  214.     }
  215.     printLinkedList(list);
  216.     for (int i = -1; i > -10; i--){
  217.         emplaceFront(list, i);
  218.     }
  219.     printLinkedList(list);
  220.     emplace(list, 60, 5);
  221.     printLinkedList(list);
  222.     erase(list, 5);
  223.     printLinkedList(list);
  224.     printf("%d\n", size(list));
  225.     clear(list);
  226.     printLinkedList(list);
  227.     free(list);
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement