I Can Guess the Data Structure!
注意点:
如果ADT已经为空了,确仍然返回了一个“正常值”,说明三者都不可能。
#include<stdio.h>
#include<iostream>
#include<cmath>
#include<math.h>
#include<string>
#include<string.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<map>
#define ms0(a) memset(a,0,sizeof(a))
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
bool isStack=true,isQueue=true,isPQ=true;
int main()
{
int n,op,x;
while (~scanf("%d",&n))
{
isStack=true;isQueue=true;isPQ=true;
stack<int> sk;
queue<int> q;
priority_queue<int> pq;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&op,&x);
if(op==1)
{
sk.push(x);
q.push(x);
pq.push(x);
}
else
{
if(sk.size())
{
int x1 =sk.top();sk.pop();
if(x1!=x)
isStack=false;
int x2 =q.front();q.pop();
if(x2!=x)
isQueue=false;
int x3 =pq.top();pq.pop();
if(x3!=x)
isPQ=false;
}
else
{
isStack=false;
isQueue=false;
isPQ=false;
}
}
}
int flag = isStack+isQueue+isPQ;
if(flag==0) printf("impossible\n");
else if(flag>=2) printf("not sure\n");
else
{
if(isStack)
printf("stack\n");
if(isQueue)
printf("queue\n");
if(isPQ)
printf("priority queue\n");
}
}
return 0;
}