洛谷-【模板】栈

题目:

请你实现一个栈(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;
}

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值