一道简单数据结构题。

题目大意

模拟队列和栈,其中队列是FIFO,栈是FILO

输入时有多个测试用例。

做法

显而易见,当需要模拟栈的时候就用STL的stack处理,模拟队列的时候使用queue

但要注意的是测试用例可能会出现队列或栈已经空了,但仍要求出队/栈的情况,所以出队/栈时要先判空。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include<bits/stdc++.h>
using namespace std;
int main(){
std::ios::sync_with_stdio(false);
cin.tie(0);
int task;
cin>>task;
for(int i=1;i<=task;i++){
int n;
string type;
cin>>n>>type;
if(type=="FIFO"){//队列
queue<int> Q;
int k;
string func;
for(int j=1;j<=n;j++){
cin>>func;
if(func=="IN"){
cin>>k;
Q.push(k);
}else if(func=="OUT"){
if(Q.empty())cout<<"None"<<endl;//判空
else{
cout<<Q.front()<<endl;
Q.pop();
}
}
}
}
else if(type=="FILO"){//栈
stack<int> S;
int k;
string func;
for(int j=1;j<=n;j++){
cin>>func;
if(func=="IN"){
cin>>k;
S.push(k);
}else if(func=="OUT"){
if(S.empty())cout<<"None"<<endl;//判空
else{
cout<<S.top()<<endl;
S.pop();
}
}
}
}
}
}