我无法实现从堆栈中删除第一个元素的函数。 (我确定堆栈至少有两个元素)
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;
}
}
但同样发生...... Segmentation fault.
如何修复弹出功能?
以下是我使用的其他功能:
void InitStack(Stack **st)
{
(*st) = (Stack *) malloc(sizeof(Stack *));
(*st)->head = NULL;
}
int IsEmptyStack (Stack *st)
{
if (!st)
return 1;
else
return 0;
}
答案 0 :(得分: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
}
}
答案 1 :(得分:0)
IsEmptyStack错了.. 而不是
int IsEmptyStack (Stack *st)
{
if (!st)
return 1;
else
return 0;
}
我必须使用
int IsEmptyStack (Stack *st)
{
if (!st->head)
return 1;
else
return 0;
}
那是因为我已经为st分配了内存..所以检查st是无关紧要的。