题目描述
组队列是队列结构中一种常见的队列结构,在很多地方有着广泛应用。组队列是是指队列内的元素分组聚集在一起。组队列包含两种命令:
1、 ENQUEUE,表示当有新的元素进入队列,首先会检索是否有同一组的元素已经存在,如果有,则新元素排在同组的最后,如果没有则插入队列末尾。
2、 DEQUEUE,表示队列头元素出队
3、 STOP,停止操作
建议使用C++自带的队列对象queue,编程更方便
输入
第1行输入一个t(t<=10),表示1个队列中有多少个组
第2行输入一个第1组的元素个数和数值
第3行输入一个第2组的元素个数和数值
以此类推输入完t组以定义同组元素之后,开始输入多个操作命令(<200),对空的组队列进行操作,例如输入ENQUEUE 100,表示把元素100插入队列
输出
DEQUEUE出队的元素
样例输入
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
样例输出
101 102 103
提示
#include<iostream>
#include<queue>
#include<map>
using namespace std;
int main()
{
int T;
cin>>T;
int value;
map<int,int>mem;///map提供key--value映射,此处每个key(101、102、103)的value都是1,(201、202、203)的value都是2
int flag=1;
int number;
queue<int>que[T];
queue<int>output;
for(int i=0;i<T;i++)
{
cin>>number;
while(number--)
{
cin>>value;
mem[value]=i;
}
}
string oper;
while(cin>>oper&&oper!="STOP")
{
if(oper=="ENQUEUE")
{
cin>>value;
for(int i=0;i<T;i++)
{
if(que[i].empty()||mem[que[i].front()]==mem[value])///如果队列空或该key所对应的value值与某个队列队首相同则入该队
{
que[i].push(value);
break;
}
}
}
else if(oper=="DEQUEUE")
{
for(int i=0;i<T;i++)
{
if(!que[i].empty())
{
output.push(que[i].front());
que[i].pop();
break;
}
}
}
}///存起来用output队列输出
while(!output.empty())
{
if(flag==1)
{
flag=0;
cout<<output.front();
}
else
cout<<" "<<output.front();
output.pop();
}
cout<<endl;
return 0;
}
原文链接: https://www.cnblogs.com/SZU-DS-wys/p/12180726.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/191803
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!