05:队列基本操作
总时间限制:
1000ms
单个测试点时间限制:
500ms
内存限制:
5000kB
描述
输入若干个整数(小于50个),整数共有四种类型,不同类型的整数代表不同操作。说明如下:
1、[10,99]之间的整数:将该整数入队。
2、-1: 队首整数出队。
3、-2: 显示队列所有整数。
4、-3: 输入结束。
说明:采用链队列实现,必须有队列初始化函数、入队函数、出队函数。
输入
第一行若干整数(必须满足上述四种类型要求),以-3结束。
输出
输出队列中所有整数。
样例输入
13 25 90 -1 12 -2 -1 45 78 30 -2 -3
样例输出
25 90 12 90 12 45 78 30
提示
队列训练
来源
张亚军
#include<iostream>
using namespace std;
const int QueueSize = 100;
template<typename T>
class CirQueue
{
public:
CirQueue();
~CirQueue();
void EnQueue(T x);
T DeQueue();
T GetHead();
bool empty();
int GetRear();
private:
T data[QueueSize];
int front, rear;
// int length;
};
template<typename T>
CirQueue<T>::CirQueue()
{
front = 0;
rear = 0;
}
template<typename T>
CirQueue<T>::~CirQueue()
{
}
template<typename T>
void CirQueue<T>::EnQueue(T x)
{
if ((rear + 1) % QueueSize == front)
{
cout << "上溢" << endl;
}
rear = (rear + 1) % 100;
data[rear] = x;
}
template<typename T>
T CirQueue<T>::DeQueue()
{
if (rear == front)
{
// cout << "下溢" << endl;
}
front = (front + 1) % QueueSize;
return data[front];
}
template<typename T>
T CirQueue<T>::GetHead()
{
if (rear == front)
{
// cout << "下溢" << endl;
}
else
{
return data[(front + 1) % QueueSize];
}
}
template<typename T>
bool CirQueue<T>::empty()
{
if (rear != front)
{
return false;
}
else
{
return true;
}
}
template<typename T>
int CirQueue<T>::GetRear()
{
return rear;
}
int Work()
{
CirQueue<int>Que;
int n,m=0;
cin >> n;
while (n != -3)
{
if (n == -1)
{
Que.DeQueue();
m--;
}
else if (n == -2)
{
int temp = Que.GetRear();
for (int i = 0; i<m; i++)
{
cout << Que.GetHead() << " ";
Que.EnQueue(Que.GetHead());
Que.DeQueue();
}
cout << endl;
}
else
{
Que.EnQueue(n);
m++;
}
cin >> n;
}
return -1;
}
int main(void)
{
Work();
return 0;
}