简单的堆栈,流行

时间:2014-04-10 22:54:10

标签: c stack

我在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");
}

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

或许某些事情写错了?

1 个答案:

答案 0 :(得分:3)

使用temp的原因是因为您需要删除堆栈的顶部(刚刚弹出的堆栈),但您还想将顶部修改为以下元素。

为了做到这一点,你需要将旧的顶部存储在某处,更改顶部,然后删除最后一个顶部。

malloc()是冗余和泄漏的内存,你什么都不做,你绑定它到temp,但在使用这个变量之前,你重新绑定一个不同的地址它

根据经验,应该暗示你出现了问题 - 为什么在删除时需要动态分配?虽然并非总是错误,但它确实暗示了调查。