#include #include #include typedef struct covek { char *ime; struct covek *sled; } Covek; main() { int i, N, M; Covek *prvi, *x, *t; char * ucesnik; printf("Unesite broj ljudi u krugu i parametar za izbacivanje \n "); scanf("%d %d", &N, &M); /* Alocira se prostor i formira prvi clan kruzne liste */ prvi = (Covek * )malloc( sizeof(Covek) ); printf("Unesite ime 1. ucesnika igre \n"); scanf("%s",ucesnik); prvi->ime = (char*)malloc(strlen(ucesnik)+1); strcpy(prvi->ime,ucesnik); x = prvi; /* Formiranje kruga od N clanova */ for(i = 2; i <= N; i++) { /* Alocira se prostor za novog clana liste */ if( (x->sled = (Covek *)malloc(sizeof(Covek))) == NULL) { /* Ukoliko nema dovoljno prostora u memoriji ispisuje se poruka i neregularno zavrsava rad programa */ printf("Nema dovoljno mesta\n"); return 1; } x = x->sled; /*Unosi se ime novog ucesnika igre */ printf("Unesite ime %d. ucesnika igre \n",i); scanf("%s",ucesnik); x->ime = (char*)malloc(strlen(ucesnik)+1); strcpy(x->ime,ucesnik); } /* Zatvara se krug tako sto poslednji dodati element pokazuje na prvi */ x->sled = prvi; /*Izbacuje se svaki M-ti iz kruga sve dok ne ostane samo jedan u krugu*/ while( x != x->sled ) { /* Pozicioniranje x na M-1-vo mesto */ for(i=1; i < M; i++) x = x->sled; /* Vrsi se izbacivanje M-tog elementa */ printf("Ispada : %s \n", x->sled->ime); t = x->sled; x->sled = x->sled->sled; free(t); } /*Stampa se pobednik - poslednji koji je ostao u listi */ printf("Pobednik je : %s \n", x->ime); return 0; }