/***********************************************************************/
/* file queue.cc */
/* contains the implementation of class members of class */
/* queue. */
/***********************************************************************/
#include "queue.h"
/***********************************************************************/
/* implementation of class queue */
/***********************************************************************/
/***********************************************************************/
/* operator= */
/* copies all data members of the passed queue */
/***********************************************************************/
template <class type>
const queue<type>& queue<type>::operator=(const queue<type>& qu)
{
slist_item<type> *tmp;
if (this->head != NULL)
{
this->clear();
}
this->sz= qu.sz;
if (qu.head)
{
tmp= qu.head;
do {
push(tmp->data);
tmp= tmp->next;
} while (tmp);
}
else
{
this->head= NULL;
this->tail= NULL;
}
return *this;
}
/***********************************************************************/
/* public member function push */
/* takes an argument of type and adds a new item containing the data */
/* passed to the top of the queue */
/***********************************************************************/
template <class type>
void queue<type>::push(const type& dat)
{
if (this->head != NULL) // same as if (this->tail != NULL)
{
this->tail->next= new slist_item<type>(dat);
this->tail= this->tail->next;
}
else
{
this->head= new slist_item<type>(dat);
this->tail= this->head;
}
this->sz++;
}
/***********************************************************************/
/* public mamber function pop */
/* takes no argument and returns the data of the last item in the */
/* queue. The item is deleted */
/***********************************************************************/
template <class type>
type queue<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 data contained in the first item in the queue. */
/***********************************************************************/
template <class type>
type queue<type>::peek()
{
assert(this->head != NULL);
return this->head->data;
}
/***********************************************************************/
/* public member function peek */
/* returns the data contained in the first item in the queue. */
/***********************************************************************/
template <class type>
type queue<type>::last()
{
assert(this->head != NULL);
return this->tail->data;
}