栈与队列1

1.realloc进行扩容时,如果是原地扩容就不会管,异地扩容会自动释放掉原来的内存。

2.栈在进行操作时,只能在固定的一端进行操作,入栈是在栈顶,出栈也是在栈顶,同时,栈只能先进后出。

3.栈的实现一般用数组。

typedef int STDataType;
typedef struct Stack
{
    STDataType * a;
    int top;
    int capacity;
}ST;

栈的常见操作:

栈的初始化

void STInit(ST* pst)
{
    assert(pst);
    pst->a = NULL;
    pst->top = 0;//top指向栈顶数据的下一个位置
    //top指向栈顶元素:pst->top=-1;
    pst->capacity = 0;
}

栈的销毁

void STDestroy(ST* pst)
{
    assert(pst);
    free(pst);
    pst->a = NULL;
    pst->top = pst->capacity = 0;
}

入栈

void STpush(ST* pst, STDataType x)
{
    assert(pst);
    //扩容
    if (pst->top == pst->capacity)
    {
        int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;
        STDataType* tmp = (STDataType*)realloc(pst->a, newcapacity * sizeof(STDataType));
        if (tmp == NULL)
        {
            perror("error");
            return;
        }
        pst->a = tmp;
        pst->capacity = newcapacity;
    }
    pst->a[pst->top] = x;
    pst->top++;
}

出栈

void STPop(ST* pst)
{
    assert(pst);
    pst->top--;

}

获取栈顶元素的数据

STDataType STTop(ST* pst)
{
    assert(pst);
    assert(pst->top > 0);
    return pst->a[pst->top - 1];
}

判断栈是否为空

bool STEmpty(ST* pst)
{
    assert(pst);
    return pst->top == 0;
}

栈中数据的多少

int STSize(ST* pst)
{
    assert(pst);
    return pst->top;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值