前面我们已经实现了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必须不为空 |
这个接口的优点在于用户将知道使用哪一个方法,以及这些方法接收什么参数,而不必管选择哪一种栈实现!相同接口的不同实现很可能有不同的性能权衡。