亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

你好,可以幫我解釋下這個程序是什么意思么?詳細解釋下。

你好,可以幫我解釋下這個程序是什么意思么?詳細解釋下。

米脂 2022-06-10 11:07:56
#include <iostream>#include <string>#include <queue>#include <set>using namespace std;#define MaxLen 100int 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<<' ';}}
查看完整描述

2 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

本程序實現多隊列操作。

數據結構:
// 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隊列,依次取出該隊列的所有元素并打?。?br/>
程序:
#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<<' ';
}
}


查看完整回答
反對 回復 2022-06-14
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

queue<queue<int>*> totalQueue; (這是什么意思?)totalQueue是一個隊列的指針,這個隊列里放的每個元素也都是一個隊列,這些隊列里的元素是int型的

查看完整回答
反對 回復 2022-06-14
  • 2 回答
  • 0 關注
  • 167 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號