数据结构练习三-05:队列基本操作

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值