【发布时间】:2012-10-25 18:49:38
【问题描述】:
我正在看《Programming Interviews Exposed》一书中的以下段落,其中提到了 C 中链表堆栈的实现:
typedef struct Element {
struct Element *next;
void *data;
} Element;
void push( Element *stack, void *data );
void *pop( Element *stack );
现在从适当的角度考虑这些例程中会发生什么 功能和错误处理。两个操作都改变了第一个 列表的元素。调用例程的堆栈指针必须是 修改以反映此更改,但您对 传递给这些函数的指针不会被传播回 调用例程。您可以通过同时拥有两者来解决此问题 例程采用指向堆栈指针的指针。这样,您可以 更改调用例程的指针,使其继续指向 列表的第一个元素。实施此更改会导致 以下:
void push( Element **stack, void *data );
void *pop( Element **stack);
有人可以用不同的话解释为什么我们需要在这里使用双指针吗?我对所提供的解释有点不确定。
【问题讨论】:
标签: c linked-list stack