Cyklický zoznam
Z kola von
Program EXE
/* pripojenie potrebných hlavičkových súborov */
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
/* definícia nového typu */
typedef struct ziak {
char meno[30];
struct ziak *dalsi;
} TZiak;
/* globálne premenné */
int n; /* počet žiakov */
int pocslab; /* dĺžka riekanky */
---------------------------------------------------------------------------
void vypis(TZiak *z)
{
printf("\nZiaci v kruhu: ");
while (z != NULL) {
printf("\n%s ", z->meno);
z = z->dalsi;
}
}
---------------------------------------------------------------------------
void nacitaj_ziaka(TZiak **z, TZiak **k)
{
TZiak *novy;
/* pridanie prvého prvku do prázdneho zoznamu */
if (*z == NULL) {
*z = (TZiak*)malloc(sizeof(TZiak));
printf("meno ziaka: ");
gets((*z)->meno);
(*z)->dalsi = NULL;
*k = *z;
}
else { /* pridanie ďalších prvkov */
novy = (TZiak*)malloc(sizeof(TZiak));
printf("meno ziaka: ");
gets(novy->meno);
novy->dalsi = NULL;
(*k)->dalsi = novy;
(*k) = novy;
}
}
---------------------------------------------------------------------------
void z_kola_von(TZiak **prvy, TZiak **posl)
{
TZiak *pred, *ten;
int i;
pred = *posl;
ten = *prvy;
if (n>1) {
do {
/* riekanka */
for (i = 1; i < pocslab; i++) {
pred = pred->dalsi;
ten = ten->dalsi;
}
/* ten ukazuje na žiaka, ktorý vypadáva */
n--;
pred->dalsi = ten->dalsi;
printf("\nVypadol : %s", ten->meno);
free((void*)ten);
ten = pred->dalsi;
} while (n > 1);
}
/* v zozname zostal jediný prvok */
*prvy = pred;
(*prvy)->dalsi = NULL;
*posl = *prvy;
}
---------------------------------------------------------------------------
void main(void) /* hlavný program */
{
TZiak *prvy, *posl;
int i;
/* vytvorenie prázdneho zoznamu */
prvy = posl = NULL;
/* vstup */
clrscr();
printf("Pocet ziakov: ");
scanf("%d", &n);
printf("Pocet slabik riekanky: ");
scanf("%d", &pocslab); getchar();
for (i = 1; i<= n ; i++) nacitaj_ziaka(&prvy, &posl);
vypis(prvy);
/* vytorenie kruhu */
posl->dalsi = prvy;
/* vypočítavanie */
z_kola_von(&prvy, &posl);
/* výstup */
printf("\n\nOdpovedat pojde: %s", prvy->meno);
getch();
}
|