AllHead.h
#ifndef _ALLHEAD_H
#define _ALLHEAD_H
#include<iostream>
#include<assert.h>
using namespace std;
#endif
Queue.h
#ifndef _QUEUE_H
#define _QUEUE_H
#include"AllHead.h"
const int maxSize = 10;
template<class T>
class Queue
{
protected:
int front;
int rear;
T *elements;
public:
Queue();
~Queue(){delete []elements;}
void EnQueue(T x);
bool DeQueue();
T getFront();
bool IsEmpty(){return rear == front?true:false;}
bool IsFull(){return (rear+1)%maxSize == front?true:false;}
int getSize(){return (rear-front+maxSize)%maxSize;}
void showQueue();
void clear(){front = rear = 0;}
};
template<class T>
void Queue<T>::showQueue()
{
int i;
if(!IsEmpty())
{
for(i=front;i!=rear;i = (i+1+maxSize)%maxSize)
{
cout<<elements[i]<<"\\";
}
cout<<endl;
}
else
{
cout<<"队列空(showQueue)..."<<endl;
}
}
template<class T>
Queue<T>::Queue():front(0),rear(0)
{
elements = new T[maxSize];
assert(elements != NULL);
}
template<class T>
void Queue<T>::EnQueue(T x)
{
if(!IsFull())
{
elements[rear] = x;
rear = (rear+1)%maxSize;
}
else
cout<<"队列已满"<<endl;
}
template<class T>
bool Queue<T>::DeQueue()
{
if(!IsEmpty())
{
front = (front+1)%maxSize;
}
else
{
cout<<"队列已空"<<endl;
}
return true;
}
template<class T>
T Queue<T>::getFront()
{
T x;
if(!IsEmpty())
{
x = elements[front];
return x;
}
else
{
cout<<"队列已空"<<endl;
return NULL;
}
}
#endif
main.cpp
#include"Queue.h"
int main()
{
Queue<int> q;
int select = 1;
while(select)
{
cout<<"==================================="<<endl;
cout<<"==[1]EnQueue [2]DeQueue======"<<endl;
cout<<"==[3]showQueue [4]getFront====="<<endl;
cout<<"==[5]getSize [6]clear========"<<endl;
cout<<"==================================="<<endl;
cout<<"请选择:>";
cin>>select;
switch(select)
{
case 1:
int x;
cout<<"输值以(-1)结束";
while(cin>>x,x!=-1)
{
q.EnQueue(x);
}
break;
case 2:
q.DeQueue();break;
case 3:
q.showQueue();break;
case 4:
int head;
head = q.getFront();
cout<<head<<endl;
break;
case 5:
int lenth;
lenth = q.getSize();
cout<<"队列长度:>"<<lenth<<endl;
break;
case 6:
q.clear();
}
}
return 0;
}