栈
博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!
一、栈
栈是由一系列对象组成的一个集合,这些对象的插入和删除操作遵循后进先出(LIFO)的原则。
用户可以在任何时刻向栈中插入一个对象,但只能取得或者删除最后一个插入的对象(即所谓的 “栈顶”)。
例题1:
(1)网络浏览器将最近浏览的网址存放在一个栈中。
(2)每次当访问者访问一个新网站时,这个新网站的网址就被压入栈顶。
(3)这样,浏览器就可以在用户点击 “后退” 按钮时,弹出先前访问的网址,以回到其先前访问的网页。
例题2:
(1)文本编辑器通常提供一个 “撤销” 机制以取消最近的编辑操作并返回到先前的文本状态。
(2)这个撤销操作就是通过将文本的变化状态保存在一个栈中得以实现。
1、栈的抽象数据类型(ADT)
(1)stack.push(e)
将一个元素 e 添加到栈 stack 的栈顶。
(2)stack.pop(e)
从栈 stack 中移除并且返回栈顶的元素,如果此时栈是空的,这个操作将出错。
(3)stack.top()
在不移除栈顶元素的前提下,返回一个栈 stack 的栈顶元素;若栈为空,这个操作会出错。
(4)stack.is_empty()
如果栈中不包含任何元素,则返回一个布尔值 True。
(5)len(stack)
返回栈 stack 中元素的数量;在 python 中,我们使用 __len__ 这个特殊的方法来实现它。
按照惯例,我们假定一个新创建的栈是空的,并且其容量也没有预先的限制。添加进栈的元素可以是任何类型的。
在一个初始化为整数类型的空栈 stack 中进行一系列操作的结果:
2、简单的基于数组的栈实现