//: C04:Stack.cpp {O}
// Linked list with nesting
#include "Stack.h"
#include <iostream>
using namespace std;
void Stack::Link::initialize(void* dat, Link* nxt)
{/* Qui si puņ notare come la funzione initialize sia una member function della struttura Link, contenuta a sua volta nella struttura Stack */
data = dat;
next = nxt;}
void Stack::initialize()
{
head = 0;
}
void Stack::push(void* dat)
{
Link* newLink = new Link;
/* Viene creato ed initializzato un nuovo elemento dello stack che viene poi messo in testa allo stack */
newLink->initialize(dat, head);
head = newLink;
}
void* Stack::peek()
{
/* Estrae l'elemnto in testa allo stack senza eliminarlo come fa la pop */
if(head == 0) cout << "Stack empty";
return head->data;}
void* Stack::pop()
{
/* Elimina ad uno ad uno gli elemnti dello stack dalla testa fino al primo elemento inserito */
if(head == 0) return 0;
void* result = head->data;
Link* oldHead = head;
head = head->next;
delete oldHead;
return result;}
void Stack::cleanup()
{
if(head != 0) cout << "Stack not empty" ;
} ///:~