数据结构——栈(顺序表实现栈)(C语言)

栈好像就是一叠盘子,盘子只能从最上面拿,不可以从中间或者下面。满足后进先出。

栈可以使用顺序表实现,也可以使用链表实现。

栈的重点主要是出栈和入栈

若使用顺序表实现栈,则左边为栈底,右边为栈顶(栈顶出元素)

若使用链表实现栈,头做栈顶,头插头删,可以设计为单链表。尾做栈顶,尾插尾删,设计为双向链表(否则删除数据效率低)

1.栈结构体的声明

typedef strcut Stack{
    DataType* data;
    size_t size;
    size_t capacity;
}Stack;

2.栈的初始化

void StackInit(Stack* ps)
{
    assert(ps);
    ps->data = NULL;
    ps->size = 0;
    ps->capacity = 0;
}

3.栈的销毁

void StackDestroy(Stack* ps)
{
    assert(ps);
    free(ps->data);
    ps->data = NULL;
    ps->size = ps->capacity = 0;
}

4.栈的扩容

void AddStack(Stack* ps)
{
    if(ps->capacity == ps->size)
    {
        int new_capacity = ps->capacity == 0 ? 4 : ps->capacity * 2;//扩容两倍
    }
    StackDataType* tmp = realloc(ps->data, sizeof(DataType) * new_capacity);
    if(tmp == NULL)
    {
        printf("realloc fail\n");
        exit(-1);
    }
    ps->data = tmp;
    ps->capacity = new_capacity;
}

5.入栈

void StackPush(Stack* ps, DataType x)
{
    assert(ps);
    AddStack(Stack* ps);
    ps->data[ps->size] = x;
    ps->size++;
}
    

6.出栈

DataType StackPop(Stack* ps)
{
    assert(ps);
    return ps->data[--ps->size];
}

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值