前面我们已经实现了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) |

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

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



