题目:
请你实现一个栈(stack),支持如下操作:
push(x)
:向栈中加入一个数 x。
pop()
:将栈顶弹出。如果此时栈为空则不进行弹出操作,输出Empty
。
query()
:输出栈顶元素,如果此时栈为空则输出Anguei!
。
size()
:输出此时栈内元素个数。
栈是一种数据结构,用于有顺序的存放数据,先存入的数据会被放在栈底。在栈容器内数据不能改变原有顺序,对于位于栈顶,也就是最后一个存放的数据,会有一个指针指向其地址,然后不论是存入数据还是删除数据,指针都会指向栈顶的元素,所以栈是一种先进后出的数据结构。
C++:
用vector可以模拟栈的入栈、出栈、删除、查询等操作。
##注意:vector需从0开始计数
vector的一些基础操作:
vector<int>s | 创建一个vector容器 |
s.back() | 访问最后一个元素 |
s.pop_back() | 删除最后一个元素 |
s.push_back() | 往vector最后添加一个元素 |
s.empty() | 判断vector是否为空 返回0为非空,返回1为空 |
s.size() | 返回vector元素个数 |
#include <iostream>
#include <vector>
typedef long long ll;
typedef unsigned long long ull;
const int M = 1000005;
using namespace std;
void solve() {
int n;
ull x;
string k;
cin >> n;
vector<ull>s;
for (int i = 1; i <= n; i++) {
cin >> k;
if (k == "push") {
cin >> x;
s.push_back(x);
}else if (k == "pop") {
if (s.empty() == 1)
cout << "Empty" << '\n';
else
s.pop_back();
}else if (k == "query") {
if (s.empty() == 1)
cout << "Anguei!" << '\n';
else
cout << s.back() << '\n';
}else if (k == "size")
cout << s.size() << '\n';
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
solve();
return 0;
}
STL:
在C++内置的标准库中有<stack>容器,可以模拟栈的操作。需调用<stack>头文件。
STL中栈的一些基础操作:
stack<int>s | 创建一个栈 |
s.top() | 访问栈顶元素 |
s.pop() | 删除栈顶元素 |
s.push() | 往栈顶加入元素 |
s.empty() | 判断栈是否为空 返回0为非空,返回1为空 |
s.size() | 返回栈内元素个数 |
#include <iostream>
#include <stack>
typedef long long ll;
typedef unsigned long long ull;
const int M = 1000005;
using namespace std;
void solve() {
int n;
ull x;
string k;
cin >> n;
stack<ull>s;
for (int i = 1; i <= n; i++) {
cin >> k;
if (k == "push") {
cin >> x;
s.push(x);
} else if (k == "pop") {
if (s.empty() == 1)
cout << "Empty" << '\n';
else
s.pop();
} else if (k == "query") {
if (s.empty() == 1)
cout << "Anguei!" << '\n';
else
cout << s.top() << '\n';
} else if (k == "size")
cout << s.size() << '\n';
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
solve();
return 0;
}