Jednosmerný lineárny zoznam

Riešenia


Úloha 11

#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)); /* vytvorenie prvého prvku */
	TPrvok *novy, *pom;
	int i, x;

	printf("prvok = ");
	scanf("%d", &(prvy->hodnota));
	prvy->dalsi = NULL;


	for (i = 2; i <= n; i++) {
		printf("prvok = ");
		scanf("%d", &x);  /* načítanie hodnoty zo vstupu */
		pom = prvy;   /* pomocou ukazovateľa pom prechádzame zoznamom */

		/* nájdeme správne miesto pre nový prvok */
		int b = 1;
		while ((x > pom->hodnota) && b) {
			if (pom->dalsi != NULL) pom = pom->dalsi;
			else b = 0;
		}

		/* po skončení cyklu while pom ukazuje na prvok, pred ktorý treba vložiť
		nový prvok resp. ukazuje na posledný prvok, ak je x zatiaľ najvačšia hodnota
		*/ 

		novy = (TPrvok*)malloc(sizeof(TPrvok)); /* alokujeme pamäť pre nový prvok */

		if ((pom == prvy) && (x < pom->hodnota)) { /* pridanie na začiatok */
			novy->hodnota = x;
			novy->dalsi = prvy;
			prvy = novy;
		}
		else if (!b) {  /* pridanie na koniec */
			pom->dalsi = novy;
			novy->hodnota = x;
			novy->dalsi = NULL;
		}
		else {  /* pridanie do vnútra na správne miesto */
			novy->hodnota = pom->hodnota;   /* výmena hodnôt */
			pom->hodnota = x;
			novy->dalsi = pom->dalsi;  /* nový vkladáme ZA */
			pom->dalsi = novy;
		}
	}
	return (prvy);
}
---------------------------------------------------------------------
void vypis(TPrvok *p)
{
	while (p != NULL) {
		printf("%d ", p->hodnota);
		p = p->dalsi;
	}
}
---------------------------------------------------------------------
void main(void)  /* hlavný program */
{
	TPrvok *zoznam;
	int n;

	clrscr();
	printf("Pocet prvkov zoznamu N = ");
	scanf("%d", &n);

	if (n>0) {
		zoznam = vytvor(n);
		printf("\nUsporiadany zoznam: ");
		vypis(zoznam);
	}
	else printf("Zoznam musi obsahovat aspon 1 prvok!");
	getch();
}