08.数据容器 stack

目录

0.关于栈

1.stl栈

2.练习

表达式括号匹配

加减算式

表达式求值

后缀表达式

整式的计算

3.参考文献


0.关于栈

栈是一个先进后出的数据容器。

栈是线性表,但只允许一段进行插入或删除。

像这样

 就像一堆东西,你必须要先取出上面的,才可以再去取出下面的。

如上图,想要拿到2,就必须先拿1.

我们管这样叫做

FILO(First In Last Out)

或者

LIFO(Last In First Out)

如果我告诉你有一个栈,有ABCDEF六个元素,入栈顺序为ABCDEF,那么以下的出栈顺序可以吗?

CBEADF

ACEDBF

CBFEDA

BEDFAC

第一个显然不行,拿走E之后必须要拿走D才可以拿A。

第二个可以。

第三个也可以。

第四个要拿走C才可以拿A,也不行。

判断是否合法出栈序列代码(拿走不谢):

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int s[N],a[N];
int n,top,cur;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	top=0;
	for(int i=1,cur=1;i<=n;i++){
		while(cur<=a[i]) s[++top]=cur++;
		if(s[top]==a[i]) --top;
		else{
			cout<<"NO";
			return 0;
		}
	}
	cout<<"YES";
	return 0;
} 

那么如果再告诉你,有一个栈,有ABCDEF六个元素,入栈顺序为ABCDEF。

假设出栈顺序是BCADFE,那栈的容量至少是多少?

————(请自行思考)————

1.stl栈

stl里面有很多数据容器,这些容器可以比数组模拟要方便很多。

栈在stl里面是stack,

使用前需要定义头文件 #include<stack>

栈的定义方式是这样的:stack<数据类型> 栈的名称;

比如要定义一个整数类型的栈,命名为stk,那么可以这样写:

stack<int> stk;

那么我们该怎么使用栈呢?

以下是基本的几个操作:

stk.push() →插入一个元素

stk.pop() →弹出一个(栈顶)元素

stk.size() →栈里目前的元素个数

stk.empty() →栈是否为空

stk.top() →获取栈顶元素

运行下面的代码:

#include<bits/stdc++.h>
#include<stack>
using namespace std;
stack<int> stk;
int main(){
	stk.push(10);
	stk.push(15);
	stk.push(3);
	stk.push(5);
	for(int i=1;i<=4;i++){
		cout<<"stk.size(): "<<stk.size()<<endl;
		cout<<"stk.top(): "<<stk.top()<<endl;
		stk.pop();
	}
	cout<<stk.empty();
	return 0;
}

运行结果:

 代码请自行理解,这里不多加解释。

2.练习

表达式括号匹配

表达式括号匹配 - 洛谷

加减算式

数学1(math1)- 加减算式 - 洛谷

表达式求值

[NOIP2013 普及组] 表达式求值 - 洛谷

后缀表达式

后缀表达式 - 洛谷

整式的计算

整式的计算 - 洛谷

严禁抄代码,代码自己写!!!

3.参考文献

https://cplusplus.com/reference/stack/stack/?kw=stack

STL常用容器用法大全_stl容器使用_星夜.秋声的博客-CSDN博客

STL:容器—栈_Vegdie的博客-CSDN博客

那我们下期再见咯~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!关于容器 stack,我可以给你一些简单的介绍。 在C++中,stack是一种容器适配器(container adapter),它提供了一种后进先出(LIFO)的数据结构stack基于另一个容器(默认情况下是deque)来实现其操作。它的主要操作包括推入元素到栈顶、从栈顶弹出元素以及访问栈顶元素,这些操作都是在常数时间内完成的。 要使用stack容器,首先需要包含头文件<stack>。然后,你可以声明一个stack对象,并使用其成员函数来操作栈。以下是一些常用的stack操作: 1. push(element): 将元素压入栈顶。 2. pop(): 从栈顶弹出一个元素,但不返回它。 3. top(): 返回栈顶元素,但不将其从栈中移除。 4. empty(): 检查栈是否为空。 5. size(): 返回栈中元素的数量。 下面是一个简单的示例代码,演示了如何使用stack容器: ```cpp #include <iostream> #include <stack> int main() { std::stack<int> myStack; myStack.push(3); myStack.push(5); myStack.push(8); std::cout << "Size of stack: " << myStack.size() << std::endl; std::cout << "Top element: " << myStack.top() << std::endl; myStack.pop(); std::cout << "Size of stack after pop: " << myStack.size() << std::endl; return 0; } ``` 在这个示例中,我们首先创建了一个存储整数的stack对象myStack。然后,我们使用push函数将一些元素压入栈顶,并使用top函数访问栈顶元素。最后,我们使用pop函数弹出一个元素,并检查栈的大小。 希望这个简要介绍能对你有所帮助!如果你有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值