Ruby 数据结构与算法之栈
1. 栈的简介
栈在生活中有许多物理隐喻,比如抽屉里的衬衫、盘子架上的盘子、死胡同里的火车车厢等等。栈的基本特征是它是有序的,并且对它的访问仅限于一端。
栈是一种容器,它按顺序存储一系列元素,只能在一端(称为栈顶)对元素进行访问、插入或删除操作。栈也被称为后进先出(LIFO)列表。在计算机领域,栈非常重要,因为它在递归处理中有广泛的应用,如语言解析、表达式求值、运行时函数调用管理等。
2. 栈的抽象数据类型(ADT)
栈是一种容器,它可以容纳某种类型的值。我们将其称为类型 T 的栈 ADT,其中 T 是栈中元素的类型。该类型的载体集是所有包含类型 T 元素的栈的集合,包括空栈、包含一个类型 T 元素的栈、包含两个类型 T 元素的栈等等。栈 ADT 的基本操作如下,其中 s 是类型 T 的栈,e 是类型 T 的值。如果操作的前置条件不满足,其结果是未定义的:
- push(s, e) :返回一个新的栈,该栈与 s 相同,只是在 s 的顶部添加了元素 e。
- pop(s) :移除栈 s 的顶部元素,并返回移除元素后得到的栈。此操作的前置条件是栈 s 不为空。
- empty?(s) :若栈 s 为空,则返回布尔值 true,否则返回 false。
- top(s) :返回栈 s 的顶部元素,但不将其移除。与 pop() 操作一样,该操作的前置条件是栈 s 不为空。
除了上述栈 ADT 操作说明中提到的前置条件断言外,我们还
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



