按下和弹出

2024-06-17 15:12:34 发布

您现在位置:Python中文网/ 问答频道 /正文

这是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]。它实际上如何从堆栈中移除最后一个元素?我不太明白。。。在


Tags: 函数httpscomsizestackdef来源train
2条回答

您需要区分作为概念的堆栈和实现它的列表。在这个实现中,堆栈只包含索引小于堆栈大小的列表元素。在

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

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

如果您随后pop一个元素,堆栈大小将再次从1减小到0,因此堆栈再次为空。在

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

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

stack = []

pop = stack.pop
push = stack.append

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

相关问题 更多 >