/***********************************************************************/
/* file stack.cc */
/* contains the implementation of class members of class */
/* stack. */
/***********************************************************************/
#include "stack.h"
/***********************************************************************/
/* implementation of class stack */
/***********************************************************************/
/***********************************************************************/
/* public member operator= */
/* copies all data members of the passed stack. */
/***********************************************************************/
template <class type>
const stack<type>& stack<type>::operator=(const stack<type>& st)
{
this->sz= st.sz;
if (this->head != NULL)
{
delete this->head;
}
if (st.head)
{
this->head= new slist_item<type>(*st.head);
this->tail=this->head;
while (this->tail->next)
{
this->tail= this->tail->next;
}
}
else
{
this->head= NULL;
this->tail= NULL;
}
return *this;
}
/***********************************************************************/
/* public member funtion push */
/* takes one argument of type and prepends an item with according */
/* data using the more basic member function add. */
/***********************************************************************/
template <class type>
void stack<type>::push(const type& dat)
{
add(dat);
}
/***********************************************************************/
/* public member function pop */
/* takes no argument and returns the content of the topmost item in */
/* the stack. The topmost item is deleted. */
/***********************************************************************/
template <class type>
type stack<type>::pop()
{
assert(this->head != NULL);
type dat= this->head->data;
slist_item<type> *it= this->head->next;
this->head->next= NULL;
delete this->head;
this->head=it;
this->sz--;
return dat;
}
/***********************************************************************/
/* public member function peek */
/* returns the content of the topmost item in the stack without */
/* deleting it. */
/***********************************************************************/
template <class type>
type stack<type>::peek()
{
assert(this->head != NULL);
return this->head->data;
}