#include<iostream.h>
#include "Queue.h"
#include<cstdlib>
template<class type>
class QueueItem{
public:
QueueItem(const type &st):Item(t){next=0;}
private:
type Item;
QueueItem *next;
};
template<class type>
class Queue{
public:
Queue() : front(0),back(0){}
~Queue();
type remove();
void add(const type &);
bool is_empty() const {
return front == 0;
}
private:
QueueItem<type> *front;
QueueItem<type> *back;
};
template <class type>
Queue<type>::~Queue(){
while (! is_empty())
remove();
}
template <class type>
void Queue<type>::add(const type &val)
{
QueueItem<type> *pt=new QueueItem<type>(val);
if (is_empty())
front =back=pt;
else
{
back->next=pt;
back=pt;
}
}
template <class type>
type Queue<type>::remove(){
if(is_empty())
{
cerr<<"remove() on empty queue /n";
exit(-1);
}
QueueItem<type>*pt=front;
front=front->next;
type retval=pt->Item;
delete pt;
return retval;
}
void main(){
Queue<int> *p_qi =new Queue<int>;
int ival;
for(ival=0;ival<10;++ival)
p_qi->add(ival);
int err_cnt=0;
for(ival=0;ival<10;++ival){
int qval=p_qi->remove();
if(ival!=qval) err_cnt++;
}
if(!err_cnt)
cout<<"!!queue executed ok /n";
else
cerr<<"queue errors:"<<err_cnt<<endl;
}