我在实现从堆栈中删除第一个元素的函数时遇到问题。 (我确信堆栈至少有两个元素)
typedef struct Node {
T value;
struct Node *next;
} Node;
typedef struct Stack {
Node *head;
} Stack;
void Pop(Stack **st) {
if (!IsEmptyStack(*st)) {
Node* aux = (*st)->head;
(*st)->head = (*st)->head->next;
}
}
但同样的情况发生...段错误。
如何修复弹出功能?
以下是我正在使用的其他功能:
void InitStack(Stack **st)
{
(*st) = (Stack *) malloc(sizeof(Stack *));
(*st)->head = NULL;
}
int IsEmptyStack (Stack *st)
{
if (!st)
return 1;
else
return 0;
}
最佳答案
第一种方法似乎是正确的,但为什么要将一个指向 Stack 的双指针传递给函数 Pop
呢?看来 Pop
可以这样简化:
typedef struct Node {
T value;
struct Node *next;
} Node;
typedef struct Stack {
Node *head;
} Stack;
void Pop(Stack *st) {
if (!IsEmptyStack(st)) {
Node *aux = st->head;
st->head = aux->next;
... // dispose of aux appropriately
}
}
关于c - 弹出栈C中的头元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35988277/