gpt4 book ai didi

c - 简单的堆栈,弹出

转载 作者:太空宇宙 更新时间:2023-11-04 07:18:12 27 4
gpt4 key购买 nike

我正在寻找 C 中的简单堆栈实现,并找到了类似的东西:

void pop(struct stack **top)
{
struct stack *temp;
temp = malloc(sizeof(struct stack));
if(*top != NULL)
{
printf("%d popped.\n",(*top)->data);
temp = (*top);
(*top) = (*top)->prev;
free(temp);
}
else
printf("Stack is empty.\n");
}

可能是新手问题,但我不确定我通过 free(temp) 释放的到底是什么。好像首先我将当前顶部分配给临时,然后将顶部更改为顶部->下一个(弹出前一个顶部),然后删除临时。那么使用temp有什么意义呢?

还是写错了什么?

最佳答案

使用temp的原因是因为你需要移除栈顶(刚刚出栈),但你又想将栈顶修改为后面的元素。

为此,您需要将旧陀螺存储在某处,更改陀螺,然后移除最后一个陀螺。

malloc() 是多余的并且会泄漏内存,你什么都不做,你将它绑定(bind)temp,但在使用它之前变量,你重新绑定(bind)一个不同的地址。

根据经验,应该会提示您有问题 - 为什么在删除时需要动态分配?虽然并不总是错误的,但它确实提示了调查。

关于c - 简单的堆栈,弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23000517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com