23. 绘声绘色 编程练习

Description

又到了一年一度周老师讲解简单(划掉)毒瘤数据结构的时候辣!

为了让大家更好理解,今年周老师决定和大家玩一个游戏:

假设一个黑盒箱里是某个神奇的数据结构(栈、队列、优先队列之一),每次支持你两种操作:

  •  —— 把元素  丢到这个黑盒里

  •  —— 从这个黑盒弹出一个元素

周老师给定一系列具有返回值的黑盒操作,请你来猜猜看,这是什么数据结构!本题可能用到的数据结构:

  •  —— 栈,元素遵循先进后出原则

  •  —— 队列,元素遵循先进先出原则

  •  ——优先队列(大顶堆),每次从大顶堆取出的元素是堆集合的所有元素中最大的元素

  •  ——优先队列(小顶堆),每次从小顶堆取出的元素是堆集合的所有元素中最小的元素

#include "stdio.h"
#include<iostream>
#include <queue>
#include <bits/stdc++.h>
using namespace std;
int main() 
{
    priority_queue<long long> a; //大顶堆
    priority_queue<long long, vector<long long>, greater<long long> > b;  //小顶堆
    stack<long long> c;//栈
    queue<long long> d;//队列
    int n;
    while(scanf("%d",&n) != EOF){
        long long op, x, xa, xb, xc, xd;
        int flaga = 1, flagb = 1, flagc = 1, flagd = 1;
        while(n--){
            scanf("%lld%lld",&op,&x);
            if(op == 1){
                a.push(x);
                b.push(x);
                c.push(x);
                d.push(x);
            }
            else{
                if(a.empty()||b.empty()||c.empty()||d.empty()){
                    flaga = 0;
                    flagb = 0;
                    flagc = 0;
                    flagd = 0;
                    break;
                }
                else{
                    xa = a.top();
                    xb = b.top();
                    xc = c.top();
                    xd = d.front();
                    a.pop();
                    b.pop();
                    c.pop();
                    d.pop();
                }
                if(xa != x) flaga = 0;
                if(xb != x) flagb = 0;
                if(xc != x) flagc = 0;
                if(xd != x) flagd = 0;
            }
        }
        if(flaga+flagb+flagc+flagd > 1)
            printf("not sure\n");
        else if(flaga+flagb+flagc+flagd == 0) printf("pool zls\n");
        else if(flaga == 1) printf("big priority queue\n");
        else if(flagb == 1) printf("small priority queue\n");
        else if(flagc == 1) printf("stack\n");
        else if(flagd == 1) printf("queue\n");

        while(!a.empty()){
            a.pop();
        }
        while(!b.empty()){
            b.pop();
        }
        while(!c.empty()){
            c.pop();
        }
        while(!d.empty()){
            d.pop();
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41207175/article/details/85253072