链式栈的出栈过程(pop 函数实现)

假设链式栈的初始状态如下:

头结点 (top) -> 节点A -> 节点B -> 节点C -> NULL

步骤 1:检查栈是否为空

检查 top->next 是否为 NULL。如果 top->next == NULL,说明栈为空,无法出栈。

  • 示意图

    头结点 (top) -> NULL

    如果栈为空,直接返回 0,并输出提示信息。

步骤 2:栈不为空时的操作

假设栈不为空,栈结构如下:

头结点 (top) -> 节点A -> 节点B -> 节点C -> NULL

步骤 2.1:保存栈顶节点 创建一个临时指针 temp,并将其指向栈顶节点(即 top->next)。

  • 示意图

    头结点 (top) -> 节点A -> 节点B -> 节点C -> NULL
                    ^
                    |
                temp

步骤 2.2:获取栈顶元素的值 将栈顶节点的 data 值赋给传入的变量 e

  • 示意图

    头结点 (top) -> 节点A -> 节点B -> 节点C -> NULL
                    ^
                    |
                temp

    假设节点A的 data 值为 50,则 *e = 50

步骤 2.3:更新栈顶指针 将头结点的 next 指针更新为栈顶节点的下一个节点(即 temp->next)。

  • 示意图

    头结点 (top) -> 节点B -> 节点C -> NULL

步骤 2.4:释放栈顶节点的内存 释放临时指针 temp 所指向的节点的内存。

  • 示意图

    头结点 (top) -> 节点B -> 节点C -> NULL

步骤 2.5:返回成功标志

        返回 1,表示出栈成功。

文字模拟图

以下是文字模拟的链式栈出栈过程:

初始状态:

头结点 (top) -> 节点A -> 节点B -> 节点C -> NULL

保存栈顶节点:

头结点 (top) -> 节点A -> 节点B -> 节点C -> NULL
                  ^
                  |
              temp

更新栈顶指针:

头结点 (top) -> 节点B -> 节点C -> NULL

释放栈顶节点:

头结点 (top) -> 节点B -> 节点C -> NULL

最终状态:

头结点 (top) -> 节点B -> 节点C -> NULL

简单明了的总结

  1. 检查栈是否为空

    • 如果 top->next == NULL,返回 0,栈为空。

  2. 保存栈顶节点

    • NODE *temp = top->next;

  3. 获取栈顶元素的值

    • *e = temp->data;

  4. 更新栈顶指针

    • top->next = temp->next;

  5. 释放栈顶节点的内存

    • free(temp);

  6. 返回成功标志

    • 返回 1,出栈成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值