/* File: pile.c */
/* Time-stamp: "2002-05-17 00:21:54 calvanes" */
/* Scopo: rappresentazione collegata delle pile */

/* Richiede di dichiarare il tipo degli elementi della pila */
/* typedef int TipoElemPila; */


/* definizione del tipo lista */

struct nodoLista {
  TipoElemPila info;
  struct nodoLista *next;
};
typedef struct nodoLista NodoLista;
typedef NodoLista *TipoLista;


/* definizione del tipo pila */

typedef TipoLista TipoPila;


/* inclusione delle operazioni sulle liste */

#include "liste.c"

/* implementazione delle operazioni primitive sulle pile */

void InitPila(TipoPila *pp)
  /* Inizializza la pila *pp ponendo a NULL il puntatore all'elemento
     affiorante della pila. */
{
  InitLista(pp);
}  /* InitPila */



bool TestPilaVuota(TipoPila p)
  /* Restituisce TRUE se la pila p e` vuota, FALSE altrimenti. */
{
  return (TestListaVuota(p));
}  /* TestPilaVuota */



void TopPila(TipoPila p, TipoElemPila *pv)
  /* Restituisce in *pv l'elemento affiorante della pila p,
     senza modificare la pila. */
{
  TestaLista(p, pv);
}  /* TopPila */



void Push(TipoPila *pp, TipoElemPila v)
  /* Inserisce l'elemento v in cima alla pila *pp. */
{
  InserisciTestaLista(pp, v);
}  /* Push */



void Pop(TipoPila *pp, TipoElemPila *pv)
  /* Elimina l'elemento affiorante della pila *pp, restituendone
     il valore in *pv. */
{
  TopPila(*pp, pv);
  CancellaPrimoLista(pp);
}  /* Pop */