Advertisement
Guest User

LinkedList.c

a guest
Oct 28th, 2012
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.91 KB | None | 0 0
  1. /**
  2. * @file LinkedList.c
  3. * @author Davidthefat
  4. * @date 10/27/12
  5. * @version 1.0
  6. */
  7.  
  8. #include "LinkedList.h"
  9.  
  10. void *get(int index)
  11. {
  12.         if(index >= self->size)
  13.                 return NULL;
  14.         int i = 0;
  15.         self->iterator = self->head;
  16.         while(i++<index)
  17.                 self->iterator = self->iterator->next;
  18.         return self->iterator->data;
  19. }
  20. LList *construct()
  21. {
  22.         self = (LList*)malloc(sizeof(LList));
  23.         self->size = 2;
  24.         self->head = (Node*)malloc(sizeof(Node));
  25.         self->tail = (Node*)malloc(sizeof(Node));
  26.         self->head->next = self->tail;
  27.         self->tail->next = NULL;
  28.         self->head->data = NULL;
  29.         self->tail->data = NULL;
  30.         self->get = &get;
  31.         self->add = &add;
  32.         self->addEnd = &addEnd;
  33.         self->addBeg = &addBeg;
  34.         self->del = &del;
  35.         self->set = &set;
  36.         self->destruct = &destruct;
  37.         return self;
  38. }
  39. void add(void *in, int index)
  40. {
  41.         if(index >= self->size && self->size != 0)
  42.                 return (void)printf("Index out of bounds\n");
  43.         if(index == 0 && self->size == 0) {
  44.                 self->head->data = in;
  45.                 return;
  46.         } else if(index == 0) {
  47.                 addBeg(in);
  48.                 return;
  49.         }
  50.         int i = 0;
  51.         Node *temp = (Node*)malloc(sizeof(Node));
  52.         temp->data = in;
  53.         self->iterator = self->head;
  54.         while(i++<index-1)
  55.                 self->iterator = self->iterator->next;
  56.         temp->next = self->iterator->next;
  57.         self->iterator->next = temp;
  58.         self->size++;
  59. }
  60. void addEnd(void *in)
  61. {
  62.         Node *temp = (Node*)malloc(sizeof(Node));
  63.         temp->data = in;
  64.         temp->next = NULL;
  65.         self->tail->next = temp;
  66.         self->tail = temp;
  67.         self->size++;
  68. }
  69. void addBeg(void *in)
  70. {
  71.         Node *temp = (Node*)malloc(sizeof(Node));
  72.         temp->data = in;
  73.         temp->next = self->head;
  74.         self->head = temp;
  75.         self->size++;
  76. }
  77. char del(int index)
  78. {
  79.         Node *temp;
  80.         if(index >= self->size)
  81.                 return 0*printf("Index out of bounds\n");
  82.         int i = 0;
  83.         self->iterator = self->head;
  84.         while(i++<index-1)
  85.                 self->iterator = self->iterator->next;
  86.         temp = self->iterator;
  87.         self->iterator = self->iterator->next;
  88.         temp->next = self->iterator->next;
  89.         free(self->iterator->data);
  90.         free(self->iterator);
  91.         self->size--;
  92.         return 1;
  93. }
  94. void set(void *in, int index)
  95. {
  96.         if(index >= self->size)
  97.                 return (void)printf("Index out of bounds\n");
  98.         int i = 0;
  99.         self->iterator = self->head;
  100.         while(i++<index)
  101.                 self->iterator = self->iterator->next;
  102.         self->iterator->data = in;
  103. }
  104. void destruct()
  105. {
  106.         while(self->head->next && del(self->size-1))
  107.                 ;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement