前言:
对栈的简单剖析,易理解
数据结构与算法,对于程序来说,可以说是必不可少的,对于我们这些搬砖的,也是必须掌握的。
栈的定义
栈,是一种
特殊的线性表
,它限定其中的元素只允许在线性表的一端进行插入和删除
,允许操作的一端称之为栈顶
,不允许操作的一端称为栈底
重要特性
- 后进先出、先进后出
[LIFO表]
- 栈是加了限制条件的线性结构
- 进栈和出栈只能从栈的一个端点进行
- 栈中的元素个数可以是0,此时是空栈
- 栈的元素可以变化,可以是多个,但不是无穷个
- 每个栈中的元素类型相同
理解举例
- 进电梯,先进去的后出来、后进去的先出来
- 打开网站浏览器,返回上一页的操作:浏览器将用户访问的网站组织成一个栈,用户每访问一个新页面,即进行入栈操作,返回上一页,则出栈操作
经典例题
设置入栈的序列为1234,则出栈序列不可能为< > | |
---|---|
A | 4321 |
B | 3421 |
C | 4312 |
D | 1234 |
如果能完整的解答这一题,我相信对栈的理解应该是比较清楚的了,下面来说说解题的思路
解题思路:
- 如果你的第一反应是只有
4321
的出栈序列,那么掌握的可以说很差了 - 表面上是这样,但是该题并
没有规定出栈的序列
,只是说明了入栈的序列
- 设定1先进、先出,234后入、后出,则为1432;若设定12先入、先出,34后入、后出,则为2143;以此类推
解法步骤
>存在情况
- 设定先出为1,存在情况
1234、1243、1324、1342、1432
- 设定先出为2,存在情况
2134、2143、2314、2341、2431
- 设定先出为3,存在情况
3241、3214、3421
- 设定先出为4,存在情况
4321
>不存在情况
1423
2413
3124、3142
4123、4132、4231、4213、4312
结束语
相信你如果认真地看完这篇文章,那么肯定已经理解栈了,如果想要加深了解的话,可以找些题来做一做