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

【数据结构】——有关栈的相关 *** 作,第1张

#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;
}

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1295932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存