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