这是由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]。它是如何从堆栈中删除最后一个元素的?我真的没看到它......
答案 0 :(得分:2)
您需要区分堆栈作为概念和实现它的列表。在此实现中,堆栈仅由列表中的元素组成,其索引小于堆栈大小。
当堆栈大小为0时,堆栈上没有任何内容,因为没有小于0的列表索引。
第一次推送后,堆栈大小为1,因此只有一个列表元素对应于堆栈元素:stack[0]
。
如果你然后pop
一个元素,堆栈大小再次从1减少到0,所以堆栈再次为空。
list 的大小在任何时候都不会改变,只会被认为代表堆栈元素的列表元素的数量。
您可能期望一个实现,其中堆栈元素和列表元素之间始终存在一对一的对应关系:
stack = []
pop = stack.pop
push = stack.append
答案 1 :(得分:0)
它似乎只是在下次调用push()时覆盖元素。