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