Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.69 KB | None | 0 0
  1. /*COP 3502C Midterm Assignment Two
  2. This program is written by: Ariana Muresan*/
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. typedef struct soldier{
  8.  
  9. struct soldier* next;
  10. struct soldier* previous;
  11.  
  12. int data;
  13. int num;
  14.  
  15. }soldier;
  16.  
  17.  
  18. int count = 0;
  19.  
  20.  
  21. soldier *head, *lastnode;
  22.  
  23. soldier* create_soldier(int sequence);
  24. soldier* create_reverse_circle(int n);
  25. soldier* rearrange_circle(soldier* head);
  26. void display(soldier* head);
  27. int kill(soldier* head, int n, int k);
  28.  
  29.  
  30. soldier* create_soldier(int sequence) {
  31.  
  32. struct soldier* ptr, *temp;
  33.  
  34. ptr=(struct soldier*)malloc(sizeof(soldier));
  35.  
  36. if(ptr == NULL) {
  37.  
  38. return NULL;
  39.  
  40. }
  41.  
  42. else {
  43.  
  44. }
  45.  
  46. }
  47.  
  48. /////////////////////////////////////////////////////////////////////////////////////////
  49.  
  50. soldier* create_reverse_circle(int n) {
  51.  
  52. for(int i = 1; i <= n; i++) {
  53.  
  54. head->next = create_soldier(i);
  55.  
  56. }
  57.  
  58. return head;
  59.  
  60. }
  61.  
  62. /////////////////////////////////////////////////////////////////////////////////////////
  63.  
  64. soldier* rearrange_circle(soldier* head) { //done?
  65.  
  66. struct soldier *Rhead, *next2, *t;
  67.  
  68. t = head -> next;
  69. Rhead = head;
  70. Rhead -> next = Rhead;
  71. Rhead -> previous = Rhead;
  72.  
  73. while (t != head)
  74. {
  75. next2 = t -> next;
  76. t -> next = Rhead;
  77. t -> previous = Rhead -> previous;
  78. Rhead -> previous -> next = t;
  79. Rhead -> previous = t;
  80. Rhead = t;
  81.  
  82. t = next2;
  83. }
  84. return Rhead;
  85.  
  86. }
  87.  
  88.  
  89. /////////////////////////////////////////////////////////////////////////////////////////
  90.  
  91. void display(soldier* head) { //done?
  92.  
  93. soldier* s;
  94.  
  95. s = head;
  96.  
  97.  
  98. if(head == NULL) {
  99.  
  100. return;
  101.  
  102. }
  103.  
  104. while(s->next != head) {
  105.  
  106. printf("%d", s->data);
  107.  
  108. s = s->next;
  109.  
  110. }
  111. }
  112. /////////////////////////////////////////////////////////////////////////////////////////
  113.  
  114. int kill(soldier* head, int n, int k) {
  115.  
  116. struct soldier *Rhead, *t;
  117.  
  118. int counter = 0;
  119.  
  120. if(n == 1)
  121. return head -> num;
  122.  
  123. t = head;
  124.  
  125. for (counter = 0; counter < k-1; counter++)
  126. {
  127. t = t -> next;
  128. }
  129. Rhead = t -> next;
  130. t -> next -> previous = t -> previous;
  131. t -> previous -> next = t -> next;
  132.  
  133. n--;
  134.  
  135. printf("%d", t -> num);
  136. if (n != 1)
  137.  
  138. return kill(Rhead, n, k);
  139. }
  140.  
  141.  
  142. /////////////////////////////////////////////////////////////////////////////////////////
  143.  
  144. int main() {
  145. struct soldier *circle;
  146. int safe;
  147. int skip;
  148. int amtofsoldiers;
  149. int n, k;
  150.  
  151. printf("Input: \n");
  152. scanf("%d %d", &n, &k);
  153. circle = create_reverse_circle(amtofsoldiers);
  154.  
  155. printf("List: ");
  156. display(circle);
  157. circle = rearrange_circle(circle);
  158.  
  159. printf("After ordering: ");
  160. display(circle);
  161.  
  162. safe = kill (circle, amtofsoldiers, skip);
  163. printf("\n\nSurvived: %d\n\n", safe);
  164.  
  165. return 0;
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement