总时间限制: 1000ms 内存限制: 1000kB
描述
栈是一种重要的数据结构,它具有 push k 和 pop 操作。push k 是将数字 k 加入到栈中,pop 则是从栈中取一个数出来。
栈是后进先出的:把栈也看成横向的一个通道,则 push k 是将 k 放到栈的最右边,而 pop 也是从栈的最右边取出一个数。
假设栈当前从左至右含有 1 和 2 两个数,则执行 push 5 和 pop 操作示例图如下:
1 2 3
| push 5 pop
栈 1 2 -------> 1 2 5 ------> 1 2
|
现在,假设栈是空的。给定一系列 push k 和 pop 操作之后,输出栈中存储的数字。若栈已经空了,仍然接收到 pop 操作,
则输出 error。
输入
第一行为 m,表示有 m 组测试输入,m<100。
每组第一行为 n,表示下列有 n 行 push k 或 pop 操作。(n<150)
接下来 n 行,每行是 push k 或者 pop,其中 k 是一个整数。
(输入保证同时在栈中的数不会超过 100 个)
输出
对每组测试数据输出一行。该行内容在正常情况下,是栈中从左到右存储的数字,数字直接以一个空格分隔,如果栈空,则不作输出;但若操作过程中出现栈已空仍然收到 pop,则输出 error。
样例输入
1 2 3 4 5 6 7 8
| 2 4 push 1 push 3 pop push 5 1 pop
|
样例输出
思路
使用一个栈来模拟即可。
值得注意的点
- error 是最后输出的,不是在输入 pop 检测到栈空的时候输出。
- 栈空则不输出。
Code
C++ (AI 写的)
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
| #include <iostream> #include <stack> #include <string> using namespace std;
int main() { int m; cin >> m; while (m--) { int n; cin >> n; stack<int> s; bool flag = true; while (n--) { string op; cin >> op; if (op == "push") { int k; cin >> k; s.push(k); } else { if (s.empty()) { flag = false; } else { s.pop(); } } } if (flag) { stack<int> t; while (!s.empty()) { t.push(s.top()); s.pop(); } while (!t.empty()) { cout << t.top() << " "; s.push(t.top()); t.pop(); } cout << endl; } else { cout << "error" << endl; } } return 0; }
|
C++ (我写的)
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
| #include <bits/stdc++.h> using namespace std; int main() { array<int, 200> S; string op; int m, n, k, p = 0, q = 0; cin >> m; for(int i = 1; i <= m; i++) { cin >> n; p = 0; q = 0; for(int j = 1; j <= n; j++) { cin >> op; if(op == "push") { cin >> k; S[p++] = k; } else if(op == "pop") { if(p == 0) q = 1; else p--; } } if(n != 0 && q == 0) { for(int i = 0; i < p; i++) { if(i == 0) cout << S[i]; else cout << " " << S[i]; } cout << endl; } else if(q == 1) cout << "error" << endl; } }
|
C++ (错误的)
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
| #include <bits/stdc++.h> using namespace std; int main() { array<int, 200> S; string op; int m, n, k, p = 0; cin >> m; for(int i = 1; i <= m; i++) { cin >> n; p = 0; for(int j = 1; j <= n; j++) { cin >> op; if(op == "push") { cin >> k; S[p++] = k; } else if(op == "pop") { if(p == 0) cout << "error" << endl; else p--; } } for(int i = 0; i < p; i++) { if(i == 0) cout << S[i]; else cout << " " << S[i]; } if(n != 0 && p != 0) cout << endl; } }
|