【数据结构】——有关栈的相关操作

#include "Stack.h"

//栈结构的初始化

void StackInit(ST *ps)
{
    assert(ps);
    //初始化一般先置为 0
    ps->top = 0;
    ps->a = NULL;
    ps->capacity = 0;
}

//栈的销毁

void StackDestroy(ST *ps)
{
    assert(ps);
    free(ps->a);
    ps->capacity = 0;
    ps->top = 0;
}

//入栈操作

void StackPush(ST *ps , DataType x)
{
    if (ps->top == ps->capacity)//在进行入栈操作时栈已经满了的情况
    {
        int newcapacity = ps->capacity == 0 ? 4 : (ps->capacity) * 2;//注意 ==
        DataType *tmp = realloc(ps->a, sizeof(DataType)*newcapacity);
        //之所以tmp的类型是DataType,是因为 ps->a 的类型
        if (tmp == NULL)//realloc函数为其内存分配失败
        {
            printf("realloc fail\n");
            exit(-1);
        }

        ps->a = tmp;//最终还是要将其值赋给 a
        ps->capacity = newcapacity;
    }
    //栈没有满的情况下
    ps->a[ps->top] = x;//top此时在数组上表示为数组连续元素的末端,数组首元素为a[0]
    ps->top++;
}

//出栈操作

DataType StackPop(ST *ps)
{
    assert(ps);
    assert(!StackEmpty(ps));//检查是否随着多次的出栈操作导致空栈

    return ps->a[ps->top - 1];//返回的值是栈中最后一个元素的值
}

//判断栈是否为空
bool StackEmpty(ST *ps)
{
    if (ps->top > 0)
    {
        return false;//表明不为空
    }
    else
    {
        return true;//表明栈为空
    }
      /*
        法二:
        return ps->top == 0;
        */
}

//返回栈中数据个数的函数

int StackSize(ST *ps)
{
    assert(ps);
    
    return ps->top;
}

//注意:
栈结构是不能遍历的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值