栈的相关知识

课程作业五

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()什么区别...两个感觉效果是一样的...
肯定是有区别的啊..不然还要这个干嘛 →_→

中缀表达式转换成后缀表达式

  1. 从左往右读进中缀表达式的每个字符
  2. 如果读进的是操作数,则直接输出到后缀表达式中
  3. 如果遇到")",则弹出堆栈内的运算符,直到弹出到一个"("两者互相抵消
  4. "("的优先级在堆栈内比任何运算符都小,任何运算符的优先级都可压过它,但是在栈堆外却是优先级最高的
  5. 当运算符准备进入堆栈时,必须和堆栈顶端的运算符比较,如果外面的运算符优先级高于堆栈顶端的运算符优先级则压入栈堆,如果优先级低于或等于堆栈顶端的运算符就把堆栈的运算符弹出,直到堆栈顶端的运算符优先级低于外面的运算符或堆栈为空时,就把外面这个运算符压入堆栈
  6. 中缀表达式读完后,如果运算符堆栈不为空,则将其内的运算符逐一弹出,输出外面的后缀表达式即可
posted @ 2017-05-23 11:52  Dark-Existed  阅读(441)  评论(0编辑  收藏  举报