1. 程式人生 > >C++ | 資料結構——DS佇列 組佇列

C++ | 資料結構——DS佇列 組佇列

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
****************************************************************/