链式栈的测试

#include <stdio.h>
#include <stdlib.h>

#define true  1
#define false 0

typedef int datatype; // 定义数据类型为整型
typedef struct Stack
{
    datatype data; // 栈中存储的数据
    struct Stack *top; // 指向栈顶的指针
} Stack;

int isEmpty(Stack *stack)
{
    if(stack->top == NULL) // 如果栈顶指针为空,说明栈为空
        return false; // 返回 false 表示栈非空
    return true; // 否则返回 true 表示栈为空
}

Stack *InitStack()
{
    Stack *stack = (Stack*)malloc(sizeof(Stack)); // 分配一个栈的内存空间
    if(stack == NULL)
    {
        printf("内存空间申请失败!\n"); // 如果内存分配失败,打印提示信息
        return NULL;
    }
    stack->top = NULL; // 初始化栈顶指针为空
    return stack; // 返回初始化后的栈
}

void PushStack(Stack *stack, datatype data)
{
    if(stack == NULL) // 如果栈为空,直接返回
        return ;
    Stack *p = (Stack*)malloc(sizeof(Stack)); // 分配一个新节点的内存空间
    if(p == NULL)
    {
        printf("内存空间申请失败!\n"); // 如果内存分配失败,打印提示信息
        return ;
    }
    p->data = data; // 将数据存入新节点
    p->top = stack->top; // 新节点指向原栈顶节点
    stack->top = p; // 更新栈顶指针为新节点
}

void PopStack(Stack *stack)
{
    if(stack == NULL) // 如果栈为空,直接返回
        return ;
    if(!isEmpty(stack)) // 如果栈为空,直接返回
        return ;
    Stack *p = stack->top; // 取出栈顶节点
    stack->top = p->top; // 更新栈顶指针为下一个节点
    printf("%d\n", p->data); // 打印出栈的数据
    free(p); // 释放出栈的节点占用的内存空间
    p = NULL; // 将指针置空,避免悬空指针
}

int main(int argc, char *argv[])
{ 
    Stack *stack = InitStack(); // 初始化一个栈

    PushStack(stack, 1); // 入栈数据 1
    PushStack(stack, 2); // 入栈数据 2
    PopStack(stack); // 出栈

    PopStack(stack); // 出栈
    PopStack(stack); // 尝试出栈空栈

    return 0;
}

这段代码主要实现了栈的基本功能,包括初始化栈、入栈、出栈、判断栈是否为空等操作。在 main 函数中演示了入栈和出栈操作,尝试了出栈空栈的情况。 

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值