C语言实现栈

1.概念
栈是一种线性的数据结构,采用先进后出的方式管理数据,一端的位置固定(栈底),另外一端随着数据的进出随时改变(栈顶)

栈
2.实现思路
栈是一种逻辑概念,可以使用顺序结构来实现(顺序栈),也可以使用链式结构来实现(链式栈)
链式栈可以使用单链表来实现,以头结点作为栈顶,从头部插入作为入栈,从头部删除作为出栈
链式栈
3.设计结构体

typedef int T;

typedef struct{
    T *pdata;//动态内存首地址
    int top;//栈顶
}sqstack_t,*stacklist_t;

C语言实现

  • 创建空栈
stacklist_t create_emptystack()
{
    stacklist_t stack = (stacklist_t)malloc(sizeof(sqstack_t));
    if(stack){
        //分配栈空间
        stack->pdata = (T *)malloc(sizeof(T)*STACK_SIZE);
        if(stack->pdata==NULL){
            //释放栈结构
            free(stack);
            stack = NULL;
            return NULL;
        }
        //初始化栈顶
        stack->top = 0;
    }

    return stack;
}
  • 判空/判满
//判空 0---非空  1---空
int is_empty(stacklist_t stack)
{
    return stack->top==0;
}

//判满 0---不满  1---满
int is_full(stacklist_t stack)
{
    return stack->top==STACK_SIZE;
}
  • 入栈
void stack_push(stacklist_t stack,T dt)
{
    //判满
    if(is_full(stack)){
        printf("stack is full!\n");
        return;
    }

    //入栈
    stack->pdata[stack->top++] = dt;
}
  • 出栈
T stack_pop(stacklist_t stack)
{
    //判空
    if(is_empty(stack)){
        printf("stack is empty!\n");
        return -EEMPTY;
    }
    
    //出栈
    return stack->pdata[--stack->top];
}
  • 获取栈顶元素
T stack_top(stacklist_t stack)
{
    return stack->pdata[stack->top-1];
}
  • 置空
void make_empty(stacklist_t stack)
{
    stack->top = 0;
}
  • 销毁栈
void destroy_stack(stacklist_t *pstack)
{
    //释放栈空间
    free((*pstack)->pdata);
    (*pstack)->pdata = NULL;
    //释放栈结构
    free(*pstack);
    *pstack = NULL;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值