DS队列--组队列

时间限制1s

内存限制128MB

题目描述

组队列是队列结构中一种常见的队列结构,在很多地方有着广泛应用。组队列是是指队列内的元素分组聚集在一起。组队列包含两种命令:

1、 ENQUEUE,表示当有新的元素进入队列,首先会检索是否有同一组的元素已经存在,如果有,则新元素排在同组的最后,如果没有则插入队列末尾。

2、 DEQUEUE,表示队列头元素出队

3、 STOP,停止操作

建议使用C++自带的队列对象queue,编程更方便

输入

第1行输入一个t(t<=10),表示1个队列中有多少个组

第2行输入一个第1组的元素个数和数值

第3行输入一个第2组的元素个数和数值

以此类推输入完t组以定义同组元素之后,开始输入多个操作命令(<200),对空的组队列进行操作,例如输入ENQUEUE 100,表示把元素100插入队列

输出

DEQUEUE出队的元素

输入样例1输出样例1
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\n

 

#include<iostream>
#include<queue>
#include<string>

using namespace std;

int type_search(int t,int *len ,int **p,int sample){

    for(int i = 0 ; i < t ; i++ ){
        for(int j = 0 ; j < len[i] ; j++ ){
            if(sample == p[i][j])
                return i;
        }
    }

    return -1;
}

int main(){
    int t;
    cin>>t;
    int **sum_line = new int *[t];
    int *len = new int [t];
    for(int i = 0 ; i < t ; i++ ){
        cin>>len[i];
        sum_line[i] = new int [len[i]];
        for(int j = 0 ; j < len[i] ; j++ ){
            cin>>sum_line[i][j];
        }
    }

    string move;

    queue<int> type_order;
    queue<int> *my_line = new queue<int> [t];
    bool out_flag = 0;
    while(cin>>move&&move!="STOP"){

        if(move == "ENQUEUE"){
            int sample;
            cin>>sample;
            int  type=type_search(t,len,sum_line,sample);
            if(type>=0){

                if(my_line[type].empty())
                    type_order.push(type);
                my_line[type].push(sample);
            }

        }
        else if(move == "DEQUEUE" ){
            if(out_flag)
                cout<<" ";
            if(!type_order.empty()&&!my_line[type_order.front()].empty()){

                cout<<my_line[type_order.front()].front();
                my_line[type_order.front()].pop();
                if(my_line[type_order.front()].empty())
                    type_order.pop();




            }

            out_flag = 1;

        }


    }


    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值