Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "list.h"
  4.  
  5. //List implementation
  6.  
  7. typedef struct listnode listnode_t;
  8. struct listnode {
  9. listnode_t *next;
  10. void *item;
  11. };
  12.  
  13. struct list {
  14. listnode_t *head;
  15. int numitems;
  16. };
  17.  
  18.  
  19. // Create new list
  20. list_t *list_create(void)
  21. {
  22. list_t *myList;
  23. myList = malloc(sizeof(list_t));
  24. myList->head = NULL;
  25. myList->numitems = 0;
  26.  
  27. return myList;
  28.  
  29. }
  30.  
  31. // Free list. items not freed.
  32. void list_destroy(list_t *list)
  33. {
  34. listnode_t *curr;
  35. listnode_t *neste;
  36. curr = list->head;
  37.  
  38. if (curr != NULL){
  39. neste = curr->next;
  40. }
  41.  
  42. while (curr != NULL){
  43. free(curr);
  44. curr = neste;
  45.  
  46. if(curr != NULL){
  47. neste = curr->next;
  48. }
  49. }
  50. free(list);
  51. }
  52.  
  53. // Insert item first in list
  54. int list_addfirst(list_t *list, void *item)
  55. {
  56. listnode_t *myNode;
  57. myNode = malloc(sizeof(listnode_t));
  58. myNode->item = item;
  59.  
  60. myNode->next = list->head;
  61. list->head = myNode;
  62.  
  63. return 1;
  64. }
  65.  
  66. // Insert item last in list.
  67. int list_addlast(list_t *list, void *item)
  68. {
  69. listnode_t *myNode;
  70. listnode_t *selNode = list->head;
  71. myNode = malloc(sizeof(listnode_t));
  72.  
  73. myNode->item = item;
  74. myNode->next = NULL;
  75.  
  76. if(selNode == NULL){
  77. list->head = myNode;
  78. }
  79. else{
  80. while(selNode->next != NULL) {
  81. selNode = selNode->next;
  82. }
  83. selNode->next = myNode;
  84. }
  85.  
  86. return 0;
  87. }
  88.  
  89. // Remove item from list
  90. void list_remove(list_t *list, void *item)
  91. {
  92. listnode_t *selNode = list->head;
  93.  
  94. if(selNode != NULL){
  95. if(selNode->item == item){
  96. list->head = selNode->next;
  97. free(selNode);
  98. return;
  99. }
  100. if(selNode->next != NULL){
  101. while((selNode->next)->item != item && (selNode->next)->next != NULL){
  102. selNode = selNode->next;
  103.  
  104. }
  105. listnode_t *removeNode = selNode->next;
  106. selNode->next = selNode->next->next;
  107. free(removeNode);
  108. }
  109. }
  110. }
  111.  
  112.  
  113. // Return # of items in list
  114. int list_size(list_t *list)
  115. {
  116. return list->numitems;
  117. }
  118.  
  119. //Iterator implementation
  120. struct list_iterator {
  121. listnode_t *next;
  122. list_t *list;
  123. };
  124.  
  125. // Create new list iterator
  126. list_iterator_t *list_createiterator(list_t *list)
  127. {
  128. list_iterator_t *iterator;
  129. iterator = (list_iterator_t *)malloc(sizeof(list_iterator_t));
  130. iterator->next = list->head;
  131. iterator->list = list;
  132. return iterator;
  133. }
  134.  
  135. // Free iterator
  136. void list_destroyiterator(list_iterator_t *iter)
  137. {
  138. free(iter);
  139. }
  140.  
  141. // Move iterator to next item in list and return current.
  142. void *list_next(list_iterator_t *iter)
  143. {
  144. void *value;
  145. value = NULL;
  146.  
  147.  
  148. if (iter->next != 0){
  149. value = iter->next->item;
  150. iter->next = iter->next->next;
  151. }
  152. return value;
  153.  
  154. }
  155.  
  156.  
  157. // Let iterator point to first item in list again
  158. void list_resetiterator(list_iterator_t *iter)
  159. {
  160. iter->next = iter->list->head;
  161.  
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement