栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

#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 failn");
            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;//表明栈为空
    }
      
}

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/916948.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号