Advertisement
Guest User

Untitled

a guest
May 19th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void listInsert(struct node **);
  5. void printList(struct node *);
  6. int algoritmul_jocului(struct node **, int);
  7.  
  8.  
  9. int main()
  10. {
  11. struct node *head = NULL;
  12. int castigator, skip;
  13.  
  14. listInsert(&head);
  15. printf("Copiii din lista circulara sunt:\n");
  16. printList(head);
  17. printf("Precizati al catelea copil va fi scos din joc la fiecare runda: ");
  18. scanf("%d", &skip);
  19. castigator = algoritmul_jocului(&head, skip);
  20. printf("Singurul copil care a ramas este : %d\n", castigator);
  21. free(head);
  22.  
  23. return 0;
  24. }
  25. #ifndef P1_H
  26. #define P1_H
  27. #include <stdlib.h>
  28.  
  29. struct node
  30. {
  31. int num;
  32. struct node *next;
  33. };
  34.  
  35. void listInsert(struct node **);
  36. void printList(struct node *);
  37. int algoritmul_jocului(struct node **, int);
  38.  
  39. #endif
  40.  
  41. #include "P1.h"
  42.  
  43. int algoritmul_jocului(struct node **head, int k)
  44. {
  45. struct node *p, *q;
  46. int i;
  47.  
  48. q = p = *head;
  49. while (p->next != p) //Cat timp nu s-a ajuns la NULL
  50. {
  51. for (i = 0; i < k - 1; i++) //Trece de fiecare nod pana ajunge la ultimul nod;
  52. {
  53. q = p;
  54. p = p->next;
  55. }
  56. q->next = p->next; // Retine ultimul nod care va fi scos din joc;
  57. printf("%d a fost scos.\n", p->num); // Il afiseaza printr-un mesaj;
  58. free(p); //Sterge nodul respectiv;
  59. p = q->next; //Si continua initializand primul nod cu nodul urmator.(LISTA CIRCULARA)
  60. }
  61. *head = p;
  62.  
  63. return (p->num);
  64. }
  65.  
  66. void listInsert(struct node **head)
  67. {
  68. struct node *temp, *rear; //Declararea nodurilor si a variabilelor
  69. int a, ch;
  70.  
  71. do
  72. {
  73. printf("Introduceti un copil(numar): ");
  74. scanf("%d", &a); //Citirea numarului
  75. temp = (struct node *)malloc(sizeof(struct node)); //Alocarea memoriei intr-un nod
  76. temp->num = a; //Initializarea nodului cu numarul citit de la tastatura
  77. temp->next = NULL; //Initializarea nodului urmator cu NULL
  78. if (*head == NULL)
  79. {
  80. *head = temp;
  81. }
  82. else
  83. {
  84. rear->next = temp;
  85. }
  86. rear = temp;
  87. printf("Vreti sa mai adaugati un copil ? Da(1) sau Nu(0) ? ");
  88. scanf("%d", &ch);
  89. } while (ch != 0); //Comditita de oprire a sirului
  90. rear->next = *head;
  91. }
  92.  
  93. void printList(struct node *head)
  94. {
  95. struct node *temp;
  96.  
  97. temp = head;
  98. printf("%d ", temp->num); //Functia corespunzatoare afisarii listei circulare
  99. temp = temp->next;
  100. while (head != temp)
  101. {
  102. printf("%d ", temp->num);
  103. temp = temp->next;
  104. }
  105. printf("\n");
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement