Zásobník

Riešenie


Úloha 13

Uvedieme len funkcie, ktorými sa realizujú jednotlivé operácie na zásobníku, ako aj príklady volania týchto funkcií.


#include <stdlib.h>
#include <stdio.h>

typedef struct prvok {
	int hodnota;
	struct prvok *dalsi;
} TPrvok;

--------------------------------------------------------------------------
int prazdny(TPrvok *v) /* zistí, či je zásobník prázdny */
{
	return (v == NULL);
}
--------------------------------------------------------------------------
void vloz(TPrvok **v) /* vloženie prvku na vrch zásobníka */
{
	TPrvok *pom; /* pomocný pointer */

	pom = (TPrvok*)malloc(sizeof(TPrvok));
	printf("zadaj prvok = ");
	scanf("%d", &(pom->hodnota));
	pom->dalsi = *v;
	*v = pom; /* nový vrch zásobníka */
}
--------------------------------------------------------------------------
void vyber(TPrvok **v) /* odobratie prvku z vrchu zasobnika */
{
	TPrvok *pom;

	if prazdny(*v) printf("\nZasobnik je prazdny!!! ");
	else {
		pom = *v;
		printf("Odoberam %d", pom->hodnota);
		*v = (*v)->dalsi; /* nový vrch zásobníka */
		free((void*)pom);
	}
}
--------------------------------------------------------------------------
/* vyberie prvok z prvého neprázdneho! zásobníka a vloží do druhého zásobníka */

void presun(TPrvok **v1, TPrvok **v2)
{
	TPrvok *pom; /* pomocný pointer */

	pom = *v1;
	*v1 = (*v1)->dalsi;
	pom->dalsi = *v2;
	*v2 = pom;
}
--------------------------------------------------------------------------
void main(void) /* hlavný program */
{
	TPrvok *vrch;

	vrch = NULL; /* vytvorenie prázdneho zásobníka */
	vloz(&vrch);
	vyber(&vrch);
	printf("Zasobnik %s prazdny", prazdny(vrch) ? "je" : "nie je");
		…

	TPrvok *v_pom = NULL; /* pomocný zásobník */
	if (!prazdny(vrch)) presun(&vrch, &v_pom);
		…
}