【数据结构】 栈与队列

≯℡__Kan透↙ 提交于 2019-11-27 12:37:32

栈的概念

栈是一种受限制的线性表,是只能在表尾进行插入和删除操作。

在我们日常生活中,一些软件的撤回功能,每次撤回到上一步,还有浏览器的后退键也是和栈的原理大同小异。

允许插入和删除的一端被称为栈顶,另一端被称为栈底,栈遵循后进先出的原则。

栈的插入操作,叫做入栈,栈的删除操作,叫做出栈。

栈的应用--四则运动表达式求值

使用逆波兰表示法:从左到右遍历每一个数字和符号,如果是数字就输出,如果是符号,就判断其与栈顶符号的优先级,是右括号或者优先级不高于栈顶符号,则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最后输出完整表达式。

举例:9+(3-1)*3+10/2

1.初始化空栈,用来存放符号

2.第一个数字是9,输出9,后面符号是“+”,进栈。

3.第三个符号是“(”,进栈。

4.第四个数字是3,输出,接着是“-”,进栈,然后再输出1:

5.在后面是符号“)”,此时需要匹配前面的“(”,因此栈顶一次出栈,知道“(”出栈为止。”()“不用输出

6.接下来是“ * ”入栈,发现比栈顶的“+”优先级高,继续进栈,然后后面的3输出

7.之后是符号“+”,优先级低于栈顶的 “ * ”和栈底的“+”,因此先输出 * ,然后“+”也出栈输出,那3后面的这个“+”就入栈

8.接着输出10,剩下最后一个符号入栈“:

 

9.因为到了最后了,因此栈内的符号全部出栈:

 

计算方法:从左到右遍历每一个数字和符号,遇到数字就进栈,遇到是符号,就将位于栈顶的两个数字出栈,进行运算后的结果进栈,一直到最后获得结果。

队列概念

队列也是一种受限制的线性表,是只允许在一端进行插入,另一端进行删除的操作。

允许插入的一端被称为队尾,允许删除的一端称为队头,栈遵循先进先出的原则。就像排队一样,过来一个人就要排到队尾,而进去车厢一个人肯定从队头开始。

队的插入操作,叫做入队,队的删除操作,叫做出队。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!