c - 如果我使用这种方法弹出元素,我怎么知道堆栈是空的?

标签 c stack

我正在尝试使用单链表在 C 中实现堆栈,只要堆栈非空,一切都可以正常工作。一旦为空,我的 pop 方法永远不会检测到它是空的,而是给出一些随机值。有什么方法可以让我知道堆栈是空的吗?这是我正在使用的 pop 方法以及示例主程序输出。

int main(int argc, char const *argv[])
{
    Node* top;
    push(&top,5);
    printf("Popped Element: %d\n",pop(&top));
    printf("Popped Element: %d\n",pop(&top));

    return 0;
}

int pop(Node** top)
{
    if(*top == NULL)
    {
        printf("Error: Stack is empty!\n");
        return;
    }
    int temp = (*top)->iData;
    *top = (*top)->next;
    return temp;
}

输出:

Popped Element: 5
Popped Element: 1707388

编辑: 这是推送代码

void push(Node** top ,int num)
{
    Node* temp = (Node* )malloc(sizeof(Node));
    temp->iData = num;
    temp->next = *top;
    *top = temp;
}

最佳答案

在创建新节点并将其添加到列表时将其初始化为 NULL。并使用

return -1;

而不是

return;

编辑:

在 main 中初始化 *top =NULL

   int main(int argc, char const *argv[])
{
    Node* top=NULL;
    push(&top,5);
    printf("Popped Element: %d\n",pop(&top));
    printf("Popped Element: %d\n",pop(&top));

    return 0;
}

关于c - 如果我使用这种方法弹出元素,我怎么知道堆栈是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12528267/

相关文章:

java - 栈为空时pop抛出什么异常

python - 帧被压入堆栈的顺序

c - 理解这个示例程序

c++ - Intel Pin在应用程序中调用函数

java - java从文件中读取和写入表达式

c - 为什么我的直接计数器的值始终为零?

android - 如何在Android上执行obj文件

java - 相反的方法不执行任何堆栈操作

c - 如何设置 char[] 和 int 的大小

c - C中的FILE指针,动态分配?