Jednosmerný lineárny zoznam
Riešenia
Úloha 12
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
typedef struct prvok {
int hodnota;
struct prvok *dalsi;
} TPrvok;
---------------------------------------------------------------------------
TPrvok *vytvor(int n)
{
TPrvok *prvy = (TPrvok*)malloc(sizeof(TPrvok));
TPrvok *posl, *novy;
printf("prvok = ");
scanf("%d", &(prvy->hodnota)); /* vytvorenie prvého prvku */
prvy->dalsi = NULL;
posl = prvy;
for (int i = 2; i <= n; i++) {
novy = (TPrvok*)malloc(sizeof(TPrvok));
printf("prvok = ");
scanf("%d", &(novy->hodnota));
novy->dalsi = NULL;
posl->dalsi = novy;
posl = novy;
}
return(prvy);
}
---------------------------------------------------------------------------
void vypis(TPrvok *p)
{
while (p != NULL) {
printf("%d ", p->hodnota);
p = p->dalsi;
}
}
---------------------------------------------------------------------------
void usporiadaj(TPrvok *z) /* triedenie priamym výberom */
{
TPrvok *min, *pom, *od;
int x;
od = z;
while (od->dalsi != NULL) {
pom = od;
min = pom;
pom = pom->dalsi;
/* nájdeme minimum */
while (pom != NULL) {
if (pom->hodnota < min->hodnota) min = pom;
pom = pom->dalsi;
}
x = min->hodnota; /* výmena hodnôt */
min->hodnota = od->hodnota;
od->hodnota = x;
od = od->dalsi;
}
}
---------------------------------------------------------------------------
void main(void) /* hlavný program */
{
int n;
TPrvok *zoznam;
clrscr();
printf("Pocet prvkov zoznamu N = ");
scanf("%d", &n);
if (n > 0) {
zoznam = vytvor(n);
clrscr();
printf("\nPovodny zoznam: ");
vypis(zoznam);
usporiadaj(zoznam);
printf("\nUsporiadany zoznam: ");
vypis(zoznam);
}
else printf("Zoznam musi obsahovat aspon 1 prvok !");
getch();
}
|