请帮助以下部分。当n从堆栈顶部移除并且堆栈为空时,输出应为'-1 popped'。(我得到0 atm)
void pop(void) {
struct node *temp;
int n;
if (top == NULL) {
printf("%d popped\n", top);
return;
}
n = top->item;
temp = top;
top = top->prev;
free(temp);
printf("%d popped\n", n);
return;
}
答案 0 :(得分:1)
逻辑错误,您正在与零进行比较,并希望输出为-1 !!!
if (top == NULL) {
printf("%d popped\n", top);
return;
}
应该是
if (top == NULL) {
printf("%d popped\n",-1);
return;
}
答案 1 :(得分:1)
因为NULL是空指针(即指向任何内容的指针),并且通常具有值0。
只需更改行
即可printf("%d popped\n", top);
到
printf("-1 popped\n");
答案 2 :(得分:0)
我认为这更符合您的意图:
void pop(void) {
int n;
if (top == NULL) {
// empty: magic sentinel value
n = -1;
} else {
n = top->item;
// not empty: update the stack
struct node *temp = top;
top = top->prev;
free(temp);
}
printf("%d popped\n", n);
return;
}
正如Ed和Anon正确指出的那样,您可以通过显式打印-1
来修复原始错误。但是,首先让你的逻辑变得不那么脆弱(顺便解决这个特定的错误)对我来说似乎是一个更大的胜利。