#include<iostream.h>
#include <stdlib.h>
#include<stdexcept>
using namespace std;
template<class T>
struct Node{
T data;
Node<T> *next;
};
template<class T>
class CirQueue
{
private:
//T *base;
Node<T>* front;
Node<T> * real;
//int queuesize;
public:
CirQueue( );
~CirQueue();
void EnQueue(T x);
T DeQueue();
T GetHead();
T GetLast();
int QueueEmpty();
int QueueFull();
void ClearQueue();
void QueueTranverse();
};
template<class T>
CirQueue<T>::CirQueue()
{
//base=new T[m];
/*if(base==NULL)
{
cout<<"队列建立失败"<<endl;
exit(1);
}*/
//queuesize=m;
front=new Node<T>;
front->next=NULL;
real=front;
}
template<class T>
CirQueue<T>::~CirQueue()
{
/*delete [] base;
front=real=0;
queuesize=0;*/
Node<T> *p;
while (front)
{ p=front;
front=front->next;
delete p;
}
}
template<class T>
void CirQueue<T>::EnQueue(T x)
{
/*if((real+1)%queuesize==front) throw " over error";
base[real]=x;
real=(real+1)%queuesize;*/
Node<T> *s;
s=new Node<T>;
s->data=x;
s->next=real->next;
real->next=s;
real=s;
if(front->next==NULL)
front->next=s;
}
template<class T>
T CirQueue<T>::DeQueue()
{
if(front==real) throw " error null";
T x;
//x=base[front];
//front=(front+1)%queuesize;
//return x;
Node<T> *p;
p=front->next;
x=p->data;
front->next=p->next;
if(real->next==NULL)
real=front;
delete p;
return x;
}
template<class T>
void CirQueue<T>::QueueTranverse()
{
/*for(int i=front;i<queuesize;i++)
cout<<base[i]<<endl;*/
//Node<>
while (front->next)
{
cout<<front->next->data<<endl;
front=front->next;
}
}
int main(int argc, char* argv[])
{
CirQueue<int> queue;
queue.EnQueue(1);
queue.EnQueue(2);
//queue.DeQueue();
//cout<<queue.DeQueue()<<endl;
queue.QueueTranverse();
return 0;
}
#include <stdlib.h>
#include<stdexcept>
using namespace std;
template<class T>
struct Node{
T data;
Node<T> *next;
};
template<class T>
class CirQueue
{
private:
//T *base;
Node<T>* front;
Node<T> * real;
//int queuesize;
public:
CirQueue( );
~CirQueue();
void EnQueue(T x);
T DeQueue();
T GetHead();
T GetLast();
int QueueEmpty();
int QueueFull();
void ClearQueue();
void QueueTranverse();
};
template<class T>
CirQueue<T>::CirQueue()
{
//base=new T[m];
/*if(base==NULL)
{
cout<<"队列建立失败"<<endl;
exit(1);
}*/
//queuesize=m;
front=new Node<T>;
front->next=NULL;
real=front;
}
template<class T>
CirQueue<T>::~CirQueue()
{
/*delete [] base;
front=real=0;
queuesize=0;*/
Node<T> *p;
while (front)
{ p=front;
front=front->next;
delete p;
}
}
template<class T>
void CirQueue<T>::EnQueue(T x)
{
/*if((real+1)%queuesize==front) throw " over error";
base[real]=x;
real=(real+1)%queuesize;*/
Node<T> *s;
s=new Node<T>;
s->data=x;
s->next=real->next;
real->next=s;
real=s;
if(front->next==NULL)
front->next=s;
}
template<class T>
T CirQueue<T>::DeQueue()
{
if(front==real) throw " error null";
T x;
//x=base[front];
//front=(front+1)%queuesize;
//return x;
Node<T> *p;
p=front->next;
x=p->data;
front->next=p->next;
if(real->next==NULL)
real=front;
delete p;
return x;
}
template<class T>
void CirQueue<T>::QueueTranverse()
{
/*for(int i=front;i<queuesize;i++)
cout<<base[i]<<endl;*/
//Node<>
while (front->next)
{
cout<<front->next->data<<endl;
front=front->next;
}
}
int main(int argc, char* argv[])
{
CirQueue<int> queue;
queue.EnQueue(1);
queue.EnQueue(2);
//queue.DeQueue();
//cout<<queue.DeQueue()<<endl;
queue.QueueTranverse();
return 0;
}