栈的相关知识
课程作业五
GitHub链接
栈(Stack)
堆栈(Stack)是一组相同数据类型的数据的集合,并拥有后进先出(last in first out)的特性,所有的操作都在栈顶进行。
栈堆应用广泛,包括递归的调用和返回、二叉树和森林的遍历操作、调用子程序和从子程序返回、计算表达式的转换和求值、中央处理单元(CPU)的终端处理(interrupt handling)以及所谓的堆栈计算机(stack computer)等等。
栈堆的基本操作
|CREAT| 创建一个空栈 |
|PUSH |把数据存入堆栈顶端,并返回新堆栈|
|POP |从栈堆顶端弹出数据,并返回新堆栈|
|EMPTY|判断堆栈是否为空栈,是返回true,不是返回false|
|FULL |判断堆栈是否已满,是返回true,不是返回false|
栈的实现方法
1.用数组实现堆栈
2.用链表实现堆栈
3.用容器适配器(#include < stack > )
#include< stack>
stack< Type> s
(建立一个类型为Type型的堆栈)
stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要
的,在不指定容器类型时,默认的容器类型为deque。
s.push(x)
在栈顶压入新元素 x
s.pop()
从栈堆顶端弹出数据,并返回新堆栈
s.top()
返回栈顶的元素
s.empyt()
判断堆栈是否为空栈,是返回true,不是返回false
s.size()
返回栈中元素个数
*s.swap(stack<Type>w) * (C++11)
将s与w进行交换
s.emplace(x) (c++11)
额...(Construct and insert element)
不知道和push()什么区别...两个感觉效果是一样的...
肯定是有区别的啊..不然还要这个干嘛 →_→
中缀表达式转换成后缀表达式
- 从左往右读进中缀表达式的每个字符
- 如果读进的是操作数,则直接输出到后缀表达式中
- 如果遇到")",则弹出堆栈内的运算符,直到弹出到一个"("两者互相抵消
- "("的优先级在堆栈内比任何运算符都小,任何运算符的优先级都可压过它,但是在栈堆外却是优先级最高的
- 当运算符准备进入堆栈时,必须和堆栈顶端的运算符比较,如果外面的运算符优先级高于堆栈顶端的运算符优先级则压入栈堆,如果优先级低于或等于堆栈顶端的运算符就把堆栈的运算符弹出,直到堆栈顶端的运算符优先级低于外面的运算符或堆栈为空时,就把外面这个运算符压入堆栈
- 中缀表达式读完后,如果运算符堆栈不为空,则将其内的运算符逐一弹出,输出外面的后缀表达式即可