c++标准模板库STL(stack)顺便理解逆波兰表达式

STL

初学者千万不要被吓到,这其实是一个很简单的东西(算法笔记说的,不是我说的)

stack

使用c++的stack可以容易地使用栈

stack <typename> name;

typename 可以是任意数据类型或者容器
事例:

#include <stdio>
#include <stack>
using namespace std;
int main()
{
	stack <int> st;
	for(int I=0;i<=5;i++)
	{
		st.push(i);
	}
	printf("%d",st.top());//取栈顶元素
	return 0;
}
push() //入栈()
top()// 获得栈顶元素
pop();//弹出栈顶元素
empty() 检测stack内是否为空 返回true为空,返回false为非空

stack的一些常见用途

模拟实现一些递归
防止程序对栈内存的限制而导致的程序运行出错。

应用

简单计算器

包含+,-,*,/的非负整数计算表达式,计算该表达式的值

思路:

我们输入的都是中缀表达式,首先要把它转成后缀表达式(后缀表达式俗称逆波兰表达式,前缀表达式就是波兰表达式)

操作:

  1. 把每个表达式用中括号扩起来
  2. 把两个表达式中间的运算符提到括号外右侧

计算后缀表达式

但是用代码怎么表示中缀转后缀呢? 这里我画个图⬇️

op栈是用来存放扫描到的操作符的,exp是用来存放后缀表达式的
在这里插入图片描述

我们先拿到一个中缀表达式,将它从左到右扫描,

在这里插入图片描述

经过这样的一趟扫描,此时我们得到了后缀表达式!!!也就是exp栈!

得到了后缀表达式,我们就可以计算后缀表达式啦

  1. 定义一个操作数栈 num
  2. 从左往右扫描后缀表达式
  3. 过程入下
    在这里插入图片描述
#include <stack>
#include <queue>
#include
原创文章 159 获赞 4 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44769592/article/details/104426484