Python 采用数组、链表实现栈(Stack)

本文探讨了Python中栈(Stack)的两种实现方式:数组和链表。通过AbstractCollection、AbstractStack和ArrayStack类阐述了数组实现栈的逻辑,包括如何处理数组溢出和扩容。同时,介绍了链表实现栈的优势,虽然其__iter__方法实现复杂,但push和pop操作高效。最后,分析了两种实现的时间和空间复杂度,指出当栈装载因子超过一半时,数组实现具有更高的空间效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面我们已经实现了Python 采用列表实现栈(Stack),那时我们将列表的末尾看作是栈的顶,列表方法append就是将元素压入栈中,而列表方法pop会删除并返回栈顶的元素,这种选择的主要缺点是,所有其它的列表操作也都可以操作这个栈,这包括了在任意位置插入、替换和删除元素。这些额外的操作违反了栈作为一种抽象数据类型的本意

栈接口

栈接口中的方法
栈方法 作用
s.isEmpty() 如果是空返回True,否则返回False
__len__(s) 等同于len(s),返回s中的项的数目
__str__(s) 等同于str(s),返回s中的字符串表示
s.__iter__() 等同于iter(s)或for item in s,从顶部向顶部,访问s中的每一项
s.__contains__(item) 等同于item in s,如果item在s中,返回True
s1__add__(s2) s1 + s2,返回一个新的栈,其中包含了s1和s2的项
s.__eq__(anyObject) 等同于s == anyObject
s.clear() 将s清空
s.peek() 返回s顶部的项。先验条件:s必须不为空
s.push(item) 在s的顶部添加一项
s.pop() 在s的顶部删除一项并返回该项。先验条件:s必须不为空

这个接口的优点在于用户将知道使用哪一个方法,以及这些方法接收什么参数,而不必管选择哪一种栈实现!相同接口的不同实现很可能有不同的性能权衡。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值