【C语言】栈演示(栈的几个函数)

/*
 * 栈演示(栈的几个函数)
 * */
#include "text3.h" //多文件的时候需要将所有的函数声明都放在头文件里面,
            //结构体如果是公用的话也要写在头文件里面

//栈的初始化函数
//这个函数可以使一个不能用的栈可以用相当于初始化
//通常将这个函数写在最前面
void stack_init(stack *p_stack) {
    p_stack->num = 0;//初始化栈内个数
}

//栈清理函数,清理的是已经用过的栈
//栈不用了进行清空,只是将下标归零
void stack_deinit(stack *p_stack) {
    p_stack->num = 0;
}

//获得栈里数字
//将当前位置的数据返回就可以
int stack_size(const stack *p_stack) {// 
    return p_stack->num;//返回num的值
}

//判断栈是不是放满了
//满了话下标从最后一个有效地址变为后一个,也就是SIZE,这是越界的下标
int stack_full(const stack *p_stack) {
    return p_stack->num >= SIZE;//如果栈满了,大于SIZE 
}

//判断是不是空的函数
//空的说明这个时候的num是0
int stack_empty(const stack *p_stack) {
    return !(p_stack->num);//如果是空的返回1
}

//向栈里加入数字
//这两个参数是数组所在结构体的地址和要放的数,都是形参,将要加入的数赋值给此时对应的下标的数组就可以了,在赋值之后下标会指向下一个位置
int stack_push(stack *p_stack, int num) {//因为有可能加入不进去,所以可以用返回值来判断
    if(stack_full(p_stack)) {
            return 0;
    }
    else {
        p_stack->arr[p_stack->num] = num;
        p_stack->num++; //这里位置不能交换,在赋值后再加1
        return 1;
    }
}

//从栈里获得数字的函数(获取后从栈里删除)  //这里说的获取后会删除的意思是当前指的这个位置之前已经取过了,当下次进行取值的时候会将下标减1指向上一个,把当前这个就跳过去也就是不再数组所存数据范围里了
int stack_pop(stack *p_stack, int *p_num) {//这里获得数字后直接就放在指针所指的存储区里面了
    if(stack_empty(p_stack)) {//判断如果栈不是空的才进行取值
        return 0;
    }
    else{
        p_stack->num--;  //在没有进行这一步的时候,下标所对应的是一个不是有效值的存储区,也就是在栈里面每存一个数之后,指针指的是所存数据的下一个
        *p_num = p_stack->arr[p_stack->num];//当下标减1指向数据的时候将值赋值给要给的存储区即可
        return 1;
    }
}
//从栈里获得数字(获得后不会删除)
int stack_top(const stack *p_stack,int *p_num) {
    if(stack_empty(p_stack)) {
        return 0;
    }
    else{
        *p_num = p_stack->arr[p_stack->num-1];//这里的num不会变,因为const
            return 1;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘星燎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值