推送并弹出堆栈

时间:2018-01-01 23:32:35

标签: python

这是由Codility编写的推送和弹出功能(来源:https://codility.com/media/train/5-Stacks.pdf

stack = [0] * N
size = 0
def push(x):
    global size
    stack[size] = x
    size = size + 1
def pop():
    global size
    size = size - 1
    return stack[size]

我看到pop()函数唯一能做的就是将size的值减1,然后返回stack [size]。它是如何从堆栈中删除最后一个元素的?我真的没看到它......

2 个答案:

答案 0 :(得分:2)

您需要区分堆栈作为概念和实现它的列表。在此实现中,堆栈仅由列表中的元素组成,其索引小于堆栈大小。

当堆栈大小为0时,堆栈上没有任何内容,因为没有小于0的列表索引。

第一次推送后,堆栈大小为1,因此只有一个列表元素对应于堆栈元素:stack[0]

如果你然后pop一个元素,堆栈大小再次从1减少到0,所以堆栈再次为空。

list 的大小在任何时候都不会改变,只会被认为代表堆栈元素的列表元素的数量。

您可能期望一个实现,其中堆栈元素和列表元素之间始终存在一对一的对应关系:

stack = []

pop = stack.pop
push = stack.append

答案 1 :(得分:0)

它似乎只是在下次调用push()时覆盖元素。

相关问题