ClavinJune

new Double Link List

Sep 27th, 2017
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1. #include "stdio.h"
  2. #include "malloc.h"
  3.  
  4. struct data{
  5. int value;
  6. struct data *next, *prev;
  7. }*head, *tail, *current;
  8.  
  9.  
  10. void pushHead(int value){
  11. struct data *newNode = (struct data*)malloc(sizeof(struct data));
  12. newNode->value = value;
  13. newNode->prev = newNode->next = NULL;
  14.  
  15. if( head == NULL ){
  16. head = tail = newNode;
  17. return;
  18. }
  19.  
  20. newNode->next = head;
  21. head->prev = newNode;
  22. head = newNode;
  23. }
  24.  
  25. void pushTail(int value){
  26. struct data *newNode = (struct data*)malloc(sizeof(struct data));
  27. newNode->value = value;
  28. newNode->prev = newNode->next = NULL;
  29.  
  30. if( head == NULL ){
  31. head = tail = newNode;
  32. return;
  33. }
  34.  
  35. tail->next = newNode;
  36. newNode->prev = tail;
  37. tail = newNode;
  38. }
  39.  
  40. void popHead(){
  41. if( head == NULL )
  42. return;
  43. if( head == tail ){
  44. head = tail = NULL;
  45. return;
  46. }
  47.  
  48. current = head;
  49. head = head->next;
  50. head->prev = NULL;
  51. free(current);
  52. }
  53.  
  54. void popTail(){
  55. if( head == NULL )
  56. return;
  57. if( head == tail ){
  58. head = tail = NULL;
  59. return;
  60. }
  61.  
  62. current = tail;
  63. tail = tail->prev;
  64. tail->next = NULL;
  65. free(current);
  66. }
  67.  
  68. void pushMidByIndex(int index, int value){
  69. if( head == NULL )
  70. pushHead(value);
  71.  
  72. int dataCounter = 0;
  73. current = head;
  74.  
  75. while( current != NULL ){
  76. ++dataCounter;
  77. current = current->next;
  78. }
  79.  
  80. if( index > dataCounter+1 )
  81. return;
  82.  
  83. if( index == 1 )
  84. pushHead(value);
  85. else if( index == dataCounter+1 )
  86. pushTail(value);
  87. else{
  88. struct data *newNode = (struct data*)malloc(sizeof(struct data));
  89. newNode->value = value;
  90. newNode->prev = newNode->next = NULL;
  91.  
  92. dataCounter = 0;
  93. current = head;
  94.  
  95. while( current != NULL ){
  96. ++dataCounter;
  97. if( dataCounter == index-1 )
  98. break;
  99. current = current->next;
  100. }
  101.  
  102. newNode->next = current->next;
  103. newNode->prev = current;
  104. current->next->prev = newNode;
  105. current->next = newNode;
  106. }
  107. }
  108.  
  109. void popMidByIndex(int index){
  110. if( head == NULL )
  111. return;
  112. int dataCounter = 0;
  113. current = head;
  114.  
  115. while( current != NULL ){
  116. ++dataCounter;
  117. current = current->next;
  118. }
  119.  
  120. if( index > dataCounter )
  121. return;
  122. if( index == 1 )
  123. popHead();
  124. else if( index == dataCounter )
  125. popTail();
  126. else{
  127. dataCounter = 0;
  128. current = head;
  129.  
  130. while( current != NULL ){
  131. ++dataCounter;
  132. if( dataCounter == index )
  133. break;
  134. current = current->next;
  135. }
  136.  
  137. current->next->prev = current->prev;
  138. current->prev->next = current->next;
  139. current = NULL;
  140. free(current);
  141. }
  142. }
  143.  
  144. void viewAllData(){
  145. if( head == NULL )
  146. return;
  147.  
  148. current = head;
  149. while( current != NULL ){
  150. printf("%d ", current->value);
  151. current = current->next;
  152. }
  153. }
  154.  
  155. void deleteAllData(){
  156. while( head != NULL )
  157. popHead();
  158. }
  159.  
  160. int main(int argc, char **argv){
  161. pushHead(1);
  162. viewAllData();
  163. return 0;
  164. }
Add Comment
Please, Sign In to add comment