Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- void listInsert(struct node **);
- void printList(struct node *);
- int algoritmul_jocului(struct node **, int);
- int main()
- {
- struct node *head = NULL;
- int castigator, skip;
- listInsert(&head);
- printf("Copiii din lista circulara sunt:\n");
- printList(head);
- printf("Precizati al catelea copil va fi scos din joc la fiecare runda: ");
- scanf("%d", &skip);
- castigator = algoritmul_jocului(&head, skip);
- printf("Singurul copil care a ramas este : %d\n", castigator);
- free(head);
- return 0;
- }
- #ifndef P1_H
- #define P1_H
- #include <stdlib.h>
- struct node
- {
- int num;
- struct node *next;
- };
- void listInsert(struct node **);
- void printList(struct node *);
- int algoritmul_jocului(struct node **, int);
- #endif
- #include "P1.h"
- int algoritmul_jocului(struct node **head, int k)
- {
- struct node *p, *q;
- int i;
- q = p = *head;
- while (p->next != p) //Cat timp nu s-a ajuns la NULL
- {
- for (i = 0; i < k - 1; i++) //Trece de fiecare nod pana ajunge la ultimul nod;
- {
- q = p;
- p = p->next;
- }
- q->next = p->next; // Retine ultimul nod care va fi scos din joc;
- printf("%d a fost scos.\n", p->num); // Il afiseaza printr-un mesaj;
- free(p); //Sterge nodul respectiv;
- p = q->next; //Si continua initializand primul nod cu nodul urmator.(LISTA CIRCULARA)
- }
- *head = p;
- return (p->num);
- }
- void listInsert(struct node **head)
- {
- struct node *temp, *rear; //Declararea nodurilor si a variabilelor
- int a, ch;
- do
- {
- printf("Introduceti un copil(numar): ");
- scanf("%d", &a); //Citirea numarului
- temp = (struct node *)malloc(sizeof(struct node)); //Alocarea memoriei intr-un nod
- temp->num = a; //Initializarea nodului cu numarul citit de la tastatura
- temp->next = NULL; //Initializarea nodului urmator cu NULL
- if (*head == NULL)
- {
- *head = temp;
- }
- else
- {
- rear->next = temp;
- }
- rear = temp;
- printf("Vreti sa mai adaugati un copil ? Da(1) sau Nu(0) ? ");
- scanf("%d", &ch);
- } while (ch != 0); //Comditita de oprire a sirului
- rear->next = *head;
- }
- void printList(struct node *head)
- {
- struct node *temp;
- temp = head;
- printf("%d ", temp->num); //Functia corespunzatoare afisarii listei circulare
- temp = temp->next;
- while (head != temp)
- {
- printf("%d ", temp->num);
- temp = temp->next;
- }
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement