0

请帮助下面的部分。当 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;
}
4

3 回答 3

1

逻辑故障,您正在与零进行比较并希望输出 -1 !!!

 if (top == NULL) {
         printf("%d popped\n", top);    
     return;  
   } 

应该

  if (top == NULL) {
         printf("%d popped\n",-1);    
     return;  
   } 
于 2012-08-10T10:12:03.013 回答
1

因为 NULL 是空指针(即指向空的指针),通常值为 0。

换行就好

printf("%d popped\n", top);

printf("-1 popped\n");
于 2012-08-10T10:12:08.307 回答
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. 然而,首先让你的逻辑不那么脆弱(顺便修复这个特定的错误)对我来说似乎是一个更大的胜利。

于 2012-08-10T10:16:54.277 回答