- 我的第一本算法书
- (日)宫崎修一 石田保辉
- 571字
- 2020-08-29 01:37:54
1-4 栈
栈也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。栈就像是一摞书,拿到新书时我们会把它放在书堆的最上面,取书时也只能从最上面的新书开始取。
01
这就是栈的概念图。现在存储在栈中的只有数据Blue。
02
然后,栈中添加了数据Green。
03
接下来,数据Red入栈。
04
从栈中取出数据时,是从最上面,也就是最新的数据开始取出的。这里取出的是Red。
05
如果再进行一次出栈操作,取出的就是Green了。
解说
像栈这种最后添加的数据最先被取出,即“后进先出”的结构,我们称为Last In First Out,简称LIFO。
与链表和数组一样,栈的数据也是线性排列,但在栈中,添加和删除数据的操作只能在一端进行,访问数据也只能访问到顶端的数据。想要访问中间的数据时,就必须通过出栈操作将目标数据移到栈顶才行。
应用示例
栈只能在一端操作这一点看起来似乎十分不便,但在只需要访问最新数据时,使用它就比较方便了。
比如,规定(AB(C(DE)F)(G((H)I J)K))这一串字符中括号的处理方式如下:首先从左边开始读取字符,读到左括号就将其入栈,读到右括号就将栈顶的左括号出栈。此时,出栈的左括号便与当前读取的右括号相匹配。通过这种处理方式,我们就能得知配对括号的具体位置。
另外,我们将要在4-3节中学习的深度优先搜索算法,通常会选择最新的数据作为候补顶点。在候补顶点的管理上就可以使用栈。
参考:4-3 深度优先搜索