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

来源:互联网 发布:美女秀场软件 编辑:程序博客网 时间:2024/06/04 01:25
/* * 栈演示(栈的几个函数) * */#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是0int 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;    }}
原创粉丝点击