堆栈实现输出

时间:2012-08-10 10:09:14

标签: c

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

3 个答案:

答案 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来修复原始错误。但是,首先让你的逻辑变得不那么脆弱(顺便解决这个特定的错误)对我来说似乎是一个更大的胜利。