这是Codility编写的push和pop函数(来源: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时,堆栈上没有任何内容,因为没有小于0的列表索引。在
在第一次推送之后,堆栈大小为1,因此只有一个列表元素对应于堆栈元素:
stack[0]
。在如果您随后
pop
一个元素,堆栈大小将再次从1减小到0,因此堆栈再次为空。在列表的大小在任何时候都不会改变,只是被认为代表堆栈元素的列表元素的数量。在
您可能希望实现堆栈元素和列表元素之间始终存在一对一的对应关系:
它似乎只是在下次调用push()时重写元素。在
相关问题 更多 >
编程相关推荐