C++ | 資料結構——DS佇列 組佇列
阿新 • • 發佈:2018-12-14
DS佇列--組佇列
時間限制: 1 Sec 記憶體限制: 128 MB 提交: 2516 解決: 676 [提交][狀態][討論版]
題目描述
組佇列是佇列結構中一種常見的佇列結構,在很多地方有著廣泛應用。組佇列是是指佇列內的元素分組聚集在一起。組佇列包含兩種命令:
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 <queue> #include <map> #include <string> #include <iostream> using namespace std; int main() { int t,i,j,k; int value; map <int,int> mem; int flag=1; cin >> t; queue <int> que[10]; for(i = 0; i < t; i++) { cin >> j; while(j--) { cin >> value; mem[value]=i; } } string tag; while(cin >> tag && tag != "STOP") { if(tag == "ENQUEUE") { cin >> value; for(i = 0; i < 10; i++) { if(que[i].empty() || mem[que[i].front()] == mem[value]) { que[i].push(value); break; } } } else if( tag == "DEQUEUE") { for(i = 0; i < 10; i++) { if(!que[i].empty()) { if(flag) flag = 0; else cout << ' '; cout << que[i].front(); que[i].pop(); break; } } } } return 0; } /************************************************************** Problem: 1209 User: 2017192023 Language: C++ Result: 正確 Time:8 ms Memory:1272 kb ****************************************************************/