栈为何物
栈(stack)是一种操作受限制的线性表,只允许一端进行插入删除操作的数据结构,即先进后出,后进先出的数据结构。
有点类似我们放盘子,最后放上去的盘子总是最先拿下来。
栈的实现和特点
栈很多时候可以被数组和链表替代,但由于数组和链表的可操作性高,同时会带来的就是不可控性,当我们只需要在一端操作,满足先进后出、后进先出的时候,我们就可以使用栈来进行操作。
栈的应用
栈的实际应用有很多种情况,列举一下几种:
栈在计算中的使用
3+4*5-6
这个代码对于人脑来说太简单了,很容易就算出来,但是对于计算机来说,他并不能判断应该按怎么样的顺序去计算,在什么时候计算,这个时候栈就可以使用了。
我们可以对表达式做一遍历,设置两个栈分别为计数栈和操作符栈,
1、当遍历到为数字时便将其压入计数栈,遍历到操作符栈的时候。
2、(1)如果操作符的优先级小于栈顶的操作符,则把其压入操作符栈,(2)如果操作符的优先级大于或等于栈顶操作符,则弹出两个计数栈中的数与操作符进行计算后再压入计数栈,遍历结束便可得到结果。
栈在网页前后翻页中的使用
当在浏览器中进行转到上一页或者下一页的操作时,也是使用栈来实现的,使用两个栈分别为前一页栈和后一页栈。
1、当首次阅览时,讲网页地址一次压入前一页栈。
2、当点击转到前一页时,弹出一个前一页栈的网址,压入后一页栈中,同样点击转到后一页时,从后一页栈中弹出一个网址压入前一页栈中。在栈空的时候点击跳转无效。
栈在括号匹配中的使用
需要检测括号是否匹配,譬如说:
{[()]}//这是一个匹配的括号组
{(})[]//这是一个不匹配的括号组
在进行括号匹配的时候可以使用栈来操作,当遍历到的为左括号时,压入栈,遍历到为右括号时,从栈中弹出一个左括号,如果不匹配则返回不匹配值。