[数据结构]栈的学习
Posted 8亩田
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数据结构]栈的学习相关的知识,希望对你有一定的参考价值。
一 栈的定义
栈是一种限定的线性表
![](https://image.cha138.com/20210609/fbfe2cf0ae024a66b159aaacd4d3e444.jpg)
比喻:装羽毛球的盒子,
二 栈抽象数据类型
![](https://image.cha138.com/20210609/73c0da5af6a74f168cf720c3ea5acaf1.jpg)
三 栈的分类
1 顺序栈 2多栈共享技术 3 链栈 4 多栈运算
3.1,顺序栈的定义:
![](https://image.cha138.com/20210609/0ffffa96d2a848d9b85eed6daa609987.jpg)
自己的理解:不是动态的,比较死;
3.1.1进栈
![](https://image.cha138.com/20210609/4383043bbd414522bdbc532344f3faf6.jpg)
注意点:要判断是否满.
比喻:如果羽毛球盒子满了怎么可能在装?!
3.1.2出栈
![](https://image.cha138.com/20210609/2882c7d507554a14b2c9e375988f5282.jpg)
注意:要判断是是否为空
比喻:如果羽毛球盒子空了,还怎么拿羽毛球?1!
3.1.3 进栈和出栈示意图:
![](https://image.cha138.com/20210609/64f83d05d4ff4e1585be875581140c62.jpg)
比喻:进栈如同装羽毛球,出栈如同拿羽毛球.
3.1.4读栈顶元素
![](https://image.cha138.com/20210609/b7cbaaeb6a784c24aa1c21731b4d2c7e.jpg)
思考:说明读栈顶元素和退栈的处理有什么异同? *****
答:读栈顶元素没有指针的移动,而退栈有指针的移动;
比喻:拿一个羽毛球就不需要移动,而你想拿多个当然要移动了;
3.2 多栈共享技术(2栈)
![](https://image.cha138.com/20210609/3d52aeb3c7654accaccdc21ecab835ef.jpg)
3.3 链栈
![](https://image.cha138.com/20210609/e03dea2bde9547848cb1c53c342e15f2.jpg)
理解;联系到链表.
比喻:1 链子 2 糖葫芦(不能从你手拿的那方出) 3 暂时没有想到
3.3.1进栈
![](https://image.cha138.com/20210609/0aed2fe074964bf5a9fff0b7bf82c4aa.jpg)
注意:同样也要判断是否满*****
3.3.2 出栈
![](https://image.cha138.com/20210609/660d54ba27f24c05b99783d3553bfad3.jpg)
注意:出栈同样也要判断是否为空
3.4 多栈运算
![](https://image.cha138.com/20210609/9a80f38b0edf4980aadc080ae0ba75c6.jpg)
四 栈的应用
4.1 括号匹配问题
算法理解:当遇到左括号时进栈,遇到右括号时比较;如( { [ ]} )
4.1.1 不合法情况:
(1) 右括号找不到栈顶左括号匹配 如 1 ({ ] ) 2 [ ] )
(2) 当读完序列时,还有左括号在栈中.如 1 {[ ] 2 [ [ ( )
4.1.2 合法的情况:读完序列时栈也同时空
![](https://image.cha138.com/20210609/c649d236b8ac419c838dc524a6cb7f71.jpg)
以上是关于[数据结构]栈的学习的主要内容,如果未能解决你的问题,请参考以下文章