Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.57 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef struct soldier
  5. {
  6. int data;
  7. struct soldier *prev, *next;
  8. } soldier;
  9.  
  10. soldier *start, *last;
  11.  
  12. int DelListDoubly(int item);
  13. soldier* create_soldier(int sequence);
  14. soldier* create_reverse_circle(int n);
  15. soldier* rearrange_circle(soldier *head);
  16.  
  17. soldier* create_soldier(int sequence){
  18. soldier *temp;
  19. temp=(soldier *) malloc(sizeof(soldier));
  20. temp->data = sequence;
  21. return temp;
  22. }
  23.  
  24. soldier* create_reverse_circle(int n){
  25. soldier *head;
  26. soldier *tmp;
  27. for(int i=0;n>i;n--){
  28. if(start==NULL){
  29. head = create_soldier(n);
  30. head->next = head->prev = head;
  31. start=head;
  32. tmp=head;
  33. }
  34. else{
  35. tmp->next=create_soldier(n);
  36. tmp = tmp->next;
  37. tmp->next = head;
  38. }
  39. }
  40. start = head;
  41. last = tmp;
  42. head->prev=tmp;
  43. return head;
  44. }
  45.  
  46. soldier* rearrange_circle(soldier *head){
  47. soldier *curr, *next, *tmp, *newStart, *newLast;
  48. newLast = start;
  49. newStart = last;
  50. curr = head;
  51. do
  52. {
  53. printf("%d", curr->data);
  54. next = curr->next;
  55. tmp = curr->prev;
  56. curr->prev = curr->next;
  57. curr->next = tmp;
  58. curr = next;
  59. } while(curr != head);
  60. display(curr);
  61. last = newLast;
  62. start = newStart;
  63. return curr;
  64. }
  65.  
  66. void display(soldier* head){
  67. if(head==NULL){
  68. printf("No Input\n");
  69. return;
  70. }
  71. printf("List = ");
  72. printf("%d ", head->data);
  73. while(head->next!=start){
  74. head = head->next;
  75. printf("%d ", head->data);
  76. }
  77. printf("\n");
  78. }
  79.  
  80. int kill(soldier* head, int n, int k){
  81.  
  82. }
  83.  
  84. int main()
  85. {
  86. start=NULL;
  87. soldier *mainList;
  88. int ch,ele,v;
  89. while(1)
  90. {
  91. printf("Menu: 1\nExit: 2\n: ");
  92. scanf("%d",&ch);
  93. if(ch==2)
  94. {
  95. printf("\nGOOD BYE.\n");
  96. break;
  97. }
  98. if(ch==1)
  99. {
  100. printf("\nEnter information(an integer): ");
  101. scanf("%d",&ele);
  102. mainList = create_reverse_circle(ele);
  103. display(mainList);
  104. mainList = rearrange_circle(mainList);
  105. display(mainList);
  106. break;
  107. }
  108.  
  109. /*
  110. if(ch==1)
  111. {
  112. printf("\nEnter information(an integer): ");
  113. scanf("%d",&ele);
  114. insert_front(ele);
  115. printf("\nPrinting ur link list.......");
  116. t=root;
  117. while(t!=NULL)
  118. {
  119. printf("%d ",t->data);
  120. t=t->next;
  121. }
  122. }
  123. if(ch==2)
  124. {
  125. printf("\nEnter information(an integer): ");
  126. scanf("%d",&ele);
  127. insert_end(ele);
  128. printf("\nPrinting your link list.......");
  129. t=root;
  130. while(t!=NULL)
  131. {
  132. printf("%d ",t->data);
  133. t=t->next;
  134. }
  135. }
  136. if(ch==3)
  137. {
  138. printf("\nEnter info which u want to DELETE: ");
  139. scanf("%d",&ele);
  140. v=DelListDoubly(ele);
  141. if(v==1)
  142. {
  143. printf("\nDeleting....");
  144. t=root;
  145. while(t!=NULL)
  146. {
  147. printf("%d ",t->data);
  148. t=t->next;
  149. }
  150. }
  151. else if(v==0)
  152. printf("\nThat info does not exist in the list");
  153.  
  154.  
  155. }
  156. */
  157. }
  158. return 0;
  159. }
  160.  
  161. int DelListDoubly(int item)
  162. {
  163. soldier *t;
  164. soldier *temp;
  165. if(start==NULL)
  166. return 0;
  167. if(temp->data==item)
  168. {
  169. temp=start;
  170. start=temp->next;
  171. if (start != NULL) //new condition for doubly
  172. temp -> prev = NULL;
  173. free(temp);
  174. return 1;
  175. }
  176. t=start;
  177. while(t->next!=NULL && t->next->data != item)
  178. t=t->next;
  179. if(t->next==NULL)
  180. return 0;
  181. temp=t->next;
  182. t->next=t->next->next;
  183. if (t->next) //new condition for doubly
  184. t->next->prev = t;
  185.  
  186. free(temp);
  187. return 1;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement