利用顺序存储结构实现一个循环队列,完成结构体的定义,以及入队函数,出队函数和主程序的编写。其中入队函数将键盘输入的整数存入队列的末尾;出队函数将队列最前面的元素打印到屏幕;入队和出队的人数可以由键盘指定。
#include<iostream>
using namespace std;
const int QueueSize = 100;
template<typename DataType>
class CirQueue
{
public:
CirQueue();
~CirQueue();
void EnQueue();
DataType DeQueue();
DataType GetHead();
int Empty();
private:
DataType data[QueueSize];
int front, rear;
};
template<typename DataType>
CirQueue<DataType>::CirQueue()
{
rear = front = QueueSize -1;
}
template<typename DataType>
CirQueue<DataType>::~CirQueue(){}
template<typename DataType>
CirQueue<DataType>::Empty()
{
if(rear == front)
{
printf("Null");
}
}
template<typename DataType>
void CirQueue<DataType>::EnQueue()
{
int b;
cout<<"请输入要入队的数字:"<<endl;
cin>>b;
if ((rear + 1) % QueueSize == front)throw"上溢";
rear = (rear + 1) % QueueSize;
data[rear] = b;
}
template<typename DataType>
DataType CirQueue<DataType>::DeQueue()
{
if (rear == front)throw"下溢";
front = (front + 1) % QueueSize;
cout<<"出队的元素是:"<<endl;
cout<<data[front]<<endl;
}
template<typename DataType>
DataType CirQueue<DataType>::GetHead()
{
if (rear == front)throw"下溢";
return data[(front + 1) % QueueSize];
}
int main()
{
int x;
int c = 0;
CirQueue<int> Q;
int a;
while(1){
cout<<"请选择功能:"<<endl;
cout<<"1:入队"<<endl;
cout<<"2:出队"<<endl;
cout<<"0:退出"<<endl;
cin>>x;
switch (x)
{
case 0: return 0;break;
case 1:Q.EnQueue();c = c+1;break;
case 2:c = c-1;if(c == -1){cout<<"队列为空!";return 0;}Q.DeQueue();break;
default:cout<<"输入错误,重新输入!"<<endl;
}
}
return 0;
}