【id:61】【9分】I. DS队列--组队列

文章描述了一种特殊的队列结构——组队列,其中元素按组聚集。在C++中,利用标准库的queue对象实现组队列,支持ENQUEUE(按组插入)和DEQUEUE(出队)操作。给定一组输入样例展示组队列的操作过程和输出结果。
摘要由CSDN通过智能技术生成

题目描述

组队列是队列结构中一种常见的队列结构,在很多地方有着广泛应用。组队列是是指队列内的元素分组聚集在一起。组队列包含两种命令:

1、 ENQUEUE,表示当有新的元素进入队列,首先会检索是否有同一组的元素已经存在,如果有,则新元素排在同组的最后,如果没有则插入队列末尾。

2、 DEQUEUE,表示队列头元素出队

3、 STOP,停止操作

建议使用C++自带的队列对象queue,编程更方便

输入

第1行输入一个t(t<=10),表示1个队列中有多少个组

第2行输入一个第1组的元素个数和数值

第3行输入一个第2组的元素个数和数值

以此类推输入完t组以定义同组元素之后,开始输入多个操作命令(<200),对空的组队列进行操作,例如输入ENQUEUE 100,表示把元素100插入队列

输出

DEQUEUE出队的元素

输入输出样例

输入样例1 <-复制
2
3 101 102 103
3 201 202 203
ENQUEUE 101
ENQUEUE 201
ENQUEUE 102
ENQUEUE 202
ENQUEUE 103
ENQUEUE 203
DEQUEUE
DEQUEUE
DEQUEUE
STOP

输出样例1
101 102 103


----------------
提示 
3 101 102 103
3 201 202 203
3 301 302 303
ENQUEUE 201 ==>>> | 201|
ENQUEUE 301 ==>>> | 201 | 301 |
ENQUEUE 102 ==>>> | 201 | 301 |102 |
ENQUEUE 101 ==>>> | 201 | 301 | 102 101 |
ENQUEUE 203 ==>>> |201 203 | 301 | 102 101 |
ENQUEUE 302 ==>>> | 201 203 | 301 302 | 102 101 |

可以看到队列分组,先入队的组在队列中靠前,出队也靠前: DEQUEUE输出201,
队列变为 | 203 | 301 302 | 102 101 | …

AC代码

#include<iostream>
#include<queue>
using namespace std;

int main()
{
	int t;
	cin >> t;
	queue <int>* q;
	q = new queue<int>[t];
	int i,j, n;
	int temp;
	int zu[15][200];
	int shunxu[15],hao=0, qq = 0,ww=0,rr=0;
	for (j = 0; j < t; j++)
	{
		cin >> n;
		for (i = 0; i < n; i++)
		{
			cin >> temp;
			zu[j][i] = temp;
		}
	}
	queue<int>out;
	string s;
	int flag = 0;
	cin >> s ;
	while (s != "STOP")
	{
		flag = -1;
		if (s == "ENQUEUE")
		{
			cin >> temp;
			for(i=0;i<t;i++)
				for (j = 0; j < n; j++)
				{
					if (zu[i][j] == temp)
					{
						flag = i;
					}
				}
			if (flag == -1)
			{
				q[i-1].push(temp);
				zu[i-1][j ] = temp;
				for (qq = 0; qq < hao; qq++)
				{
					if (shunxu[qq] == i - 1)
						rr = 1;
				}
				if (rr == 0)
				{
					shunxu[hao++] = i - 1;
				}
				rr = 0;
			}
			else
			{
				q[flag].push(temp);
				for (qq = 0; qq < hao; qq++)
				{
					if (shunxu[qq] == flag)
						rr = 1;
				}
				if (rr == 0)
				{
					shunxu[hao++] = flag;
				}
				rr = 0;
			}
		}
		else if (s == "DEQUEUE")
		{
			i = 0;
			while(q[shunxu[i]].empty())
					i++;
			i = shunxu[i];
			out.push(q[i].front());
			q[i].pop();
		}
		cin >> s;

	}
	while (!out.empty())
	{
		cout << out.front();
		out.pop();
		if (!out.empty())
		{
			cout << " ";
		}
		else
			cout << endl;
	}

}

(by 归忆) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归忆_AC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值