猜猜数据结构D301

猜猜数据结构D301
难度级别:C;            运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述

你有一个类似“包包”的数据结构,支持两种操作,如下表所示。 1x:把元素x放进包包 2:从包包中拿出一个元素 给出一系列操作以及返回值,你的任务是猜猜这个“包包”到底是什么。它可能是一个栈<后进先出),队列(先进先出),优先队列(数值大的整数先出)或者其他什么奇怪的东西。 

输入
第一行为一个整数n(1≤n≤1 000)。以下n行每行要么是一条类型1的命令,要么是一条类型2的命令后面跟着一个整数x(1≤x≤100)。这个整数x表示执行完这条类型2的命令后,包包无错地返回了x。输入文件大小不超过1MB。
输出
输出一行。一共有5种可能的输出。 stack:一定是一个栈 queue:一定是一个队列 priority queue:一定是一个优先队列 impossible:一定不是以上三种 not sure:至少有两种是可能的 
输入示例
5 1 5 1 3 1 2 2 2 2 3
输出示例
stack
其他说明
数据说明:数据那肯定非常大,建议用printf和scanf哦。
 

 就是建三个数据结构,一个队列一个栈一个优先队列,然后分别模拟,哪个不行就把哪个去掉。

刚开始好几次都是运行时错误,注意如果数据结构没有判空也会导致运行时错误,不一定是数组开小了的问题。

 

 1 #include <iostream>
 2 #include <cmath>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cstdlib>
 6 #include <algorithm>
 7 #include <queue>
 8 #include <stack>
 9 using namespace std;
10 bool owo[5];
11 int main()
12 {
13     queue <long long> q;
14     stack <long long> s;
15     priority_queue <long long> Q;
16     int n;
17     scanf("%d",&n);
18     memset(owo,1,sizeof(owo));
19     int ans=3;
20     for(int i=1;i<=n;i++)
21     {
22         int a;
23         long long b;
24         scanf("%d%lld",&a,&b);
25         if(a==1)
26         {
27             if(owo[1]) q.push(b);
28             if(owo[2]) s.push(b);
29             if(owo[3]) Q.push(b);
30         }
31         else
32         {
33             if(owo[1])
34                 if(!q.empty()) if(q.front()==b)q.pop();else {owo[1]=0;ans--;}
35                 else {owo[1]=0;ans--;}
36             if(owo[2])
37                 if(!s.empty()) if(s.top()==b)s.pop();else {owo[2]=0;ans--;}
38                 else {owo[2]=0;ans--;}
39             if(owo[3])
40                 if(!Q.empty()) if(Q.top()==b)Q.pop();else {owo[3]=0;ans--;}
41                 else {owo[3]=0;ans--;}
42         }
43     }
44     if(ans==0) printf("impossible");
45     else if(ans>1) printf("not sure");
46     else
47     {
48             if(owo[1]) printf("queue");
49             else if(owo[2]) printf("stack");
50             else printf("priority queue");
51     }
52     system("pause");
53     return 0;
54 } 
:)

 

代码太复杂了。。

 

转载于:https://www.cnblogs.com/YXY-1211/p/7686291.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值