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();
}