数据结构里面的队列问题。。。

#include<iostream>#include<string>#include<queue>#include<set>usingnamespacestd;#defi... #include <iostream>
#include <string>
#include <queue>
#include <set>
using namespace std;

#define MaxLen 100
int main(){

set<int> group[MaxLen];
queue<int> subgroupQueue[MaxLen];
queue<queue<int>*> totalQueue; (这是什么意思?)

int cases;
cin>>cases;
for(int i=0;i<cases;i++){
int setNum;
cin>>setNum;
for(int j=0;j<setNum;j++){
int temp;
cin>>temp;
group[i].insert(temp);
}
}
string s;
int current;
cin>>s;
while(s!="STOP"){
if (s=="ENQUEUE"){
cin>>current;
for(int i=0;i<cases;i++){
if (group[i].find(current)!=group[i].end()){
if (subgroupQueue[i].empty()) totalQueue.push(&subgroupQueue[i]);
subgroupQueue[i].push(current);
}
}
}else{
totalQueue.front()->pop();
if (totalQueue.front()->empty()) totalQueue.pop();
}
cin>>s;
}
while(!totalQueue.empty()){
cout<<totalQueue.front()->front();
totalQueue.front()->pop();
if (totalQueue.front()->empty())totalQueue.pop();
if (!totalQueue.empty()) cout<<' ';
}
}

可以帮我解释下这个程序是什么意思么?详细解释下。。。解释的好的追加分数~~
展开
 我来答
technic_tec
2011-12-21 · TA获得超过855个赞
知道小有建树答主
回答量:184
采纳率:0%
帮助的人:108万
展开全部
本程序实现多队列操作。

数据结构:
// cases个group,每个group[i]是一个数集
set<int> group[MaxLen];
// cases个队列,subgroupQueue[i]对应于上面的group[i]
queue<int> subgroupQueue[MaxLen];
// 队列的队列,每个元素是一个队列指针
queue<queue<int>*> totalQueue;

初始值:
cases和group[MaxLen]中的值由终端输入;所有队列(包括subgroupQueue[k]和totalQueue初始为空。

操作:
1. ENQUEUE x
依次检查各个group[i],若x是group[i]中的元素,则将x加入对应队列subgroupQueue[i];同时若subgroupQueue[i]原先为空,则将subgroupQueue[i]的指针加入队列totalQueue。这样totalQueue中包含了所有到目前为止非空的subgroupQueue[i](以队列第一个元素插入的时间为序)
2. DEQUEUE
从totalQueue队首的那个队列的首部删除一个元素;若删除后队列为空,则将这个队列也从totalQueue队首删除。
3. STOP
结束操作,打印队列中的所有元素。(从totalQueue中依次取出所有subgroupQueue队列,依次取出该队列的所有元素并打印)

程序:
#include <iostream>
#include <string>
#include <queue>
#include <set>
using namespace std;

#define MaxLen 100
int main(){

set<int> group[MaxLen];
queue<int> subgroupQueue[MaxLen];
queue<queue<int>*> totalQueue;

// 1. 由终端输入并建立集合组group[cases]
int cases;
cin>>cases;
for(int i=0;i<cases;i++){
int setNum;
cin>>setNum;
for(int j=0;j<setNum;j++){
int temp;
cin>>temp;
group[i].insert(temp);
}
}
string s;
int current;
// 2. 输入并处理操作指令,直至收到STOP指令
cin>>s;
while(s!="STOP"){
if (s=="ENQUEUE"){
// 2.1 ENQUEUE
cin>>current;
for(int i=0;i<cases;i++){
if (group[i].find(current)!=group[i].end()){ // current在group[i]中
if (subgroupQueue[i].empty()) totalQueue.push(&subgroupQueue[i]); // 将subgroupQueue[i]加入totalQueue
subgroupQueue[i].push(current); // 将current加入subgroupQueue[i]
}
}
}else{
// 2.1 DEQUEUE
totalQueue.front()->pop(); // 从第一个队列dequeue
if (totalQueue.front()->empty()) totalQueue.pop(); // 从totalQueue中删除空队列
}
cin>>s;
}
// 3. 依次输出所有队列中的所有元素
while(!totalQueue.empty()){
cout<<totalQueue.front()->front(); // 输出第一个队列的队首元素
totalQueue.front()->pop(); // 删除第一个队列的队首元素
if (totalQueue.front()->empty())totalQueue.pop(); // 若第一个队列为空,则从totalQueue中删除,继续处理下一个队列
if (!totalQueue.empty()) cout<<' ';
}
}
mia☆jiancha☆ce6608
2011-12-21 · TA获得超过1526个赞
知道小有建树答主
回答量:713
采纳率:100%
帮助的人:488万
展开全部
queue<queue<int>*> totalQueue; (这是什么意思?)totalQueue是一个队列的指针,这个队列里放的每个元素也都是一个队列,这些队列里的元素是int型 的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式