【发布时间】:2021-11-23 06:17:38
【问题描述】:
我正在使用 C 中的链表实现一个堆栈,我偶然发现了两个问题:
-
我需要
stack_pop函数返回一个有效值temp,即临时节点/单元,因此我无法释放它。所以,1)你认为为每个 pop 函数调用释放每个节点是否比使用stack_destroy()直到结束更好 2)我怎样才能同时实现free(temp)并在stack_pop中同时返回它? -
我的实现在
stack_push和stack_pop函数中都不使用exit(1)有多糟糕?
这是实现:
//// Stack
// Linked list
typedef struct {
int data;
Cell* next;
} Cell;
struct stack_l {
size_t count;
Cell *top;
};
typedef struct stack_l *Stack;
【问题讨论】:
-
您可以实现两个独立的函数:
const Cell *stack_peek(Stack stack)访问/读取顶部项目的内容,void stack_pop(Stack stack)从堆栈中删除顶部项目。 -
好吧,我只想要接口:结构栈,push,pop,检查是否为empy。我没有很好地做到这一点?
-
您描述的接口是有用且足够的,只要您的堆栈保留简单的值,例如单个
int。但是,如果您需要保留一些更大的数据(例如带有文本标签的 3D 点),使用指针访问它可能比复制到临时变量然后在return语句中再次复制临时变量更容易。 -
你会如何在我的实现中解决这个问题?
-
stack_pop 或 stack_removetop:
Cell*top=stack->top; if (top) {stack->top=top->next; free(top);}
标签: c data-structures memory-management stack