啪炽 发表于 2025-6-7 16:15:53

数据结构-顺序栈

申请一块堆空间用于存储顺序栈的元素,实现顺序栈的入栈和出栈操作,使用顺序栈的优点是内存的利用率大栈内元素的地址是连续的
/***************************************************************************
*function:创建一个顺序栈,实现入栈和出栈操作
*author:jindouliu2024@163.com
*date:2025.4.4
* Copyright (c)2024-2025   jindouliu2024@163.com   All right Reserved
* ***************************************************************************/构造顺序栈的结构体

//构造记录顺序栈SequenceStack各项参数(顺序栈的栈底地址 + 顺序栈的容量 + 顺序栈中最后有效元素的下标)的结构体
typedef struct SequenceStack
{
        DataType_t * Bottom;                //记录顺序栈的栈底
        unsigned int Size;                //记录顺序栈的容量
        int                       Last;      //顺序栈中最后元素的下标       

}SeqStack_t;创建顺序栈

//创建顺序栈并对顺序栈进行初始化
SeqStack_t * SeqStack_Create(unsigned int size)
{
        //1.利用calloc为顺序栈的管理结构体申请一块堆内存
        SeqStack_t *Manager = (SeqStack_t *)calloc(1,sizeof(SeqStack_t));

        if(NULL == Manager)
        {
                perror("calloc memory for manager is failed");
                exit(-1); //程序异常终止
        }

        //2.利用calloc为所有元素申请堆内存
        Manager->Bottom = (DataType_t *)calloc(size,sizeof(DataType_t));

        if (NULL == Manager->Bottom)
        {
                perror("calloc memory for element is failed");
                free(Manager);
                exit(-1); //程序异常终止
        }

        //3.对管理顺序栈的结构体进行初始化(元素容量 + 最后元素下标)
        Manager->Size = size;        //对顺序栈中的容量进行初始化
        Manager->Last = -1;                //由于顺序栈为空,则最后元素下标初值为-1
       
        return Manager;
}判断栈是否满

//判断顺序栈是否已满
bool SeqStack_IsFull(SeqStack_t *Manager)
{
        return (Manager->Last + 1 == Manager->Size) ? true : false;
}入栈操作

//向顺序栈加入元素
bool SeqStack_Add(SeqStack_t *Manager, DataType_t Data)
{
        //1.判断顺序表是否已满
        if ( SeqStack_IsFull(Manager) )
        {
                printf("SeqStack is Full!\n");
                return false;
        }

        //2.如果顺序栈有空闲空间,则把新元素添加到顺序栈
        Manager->Bottom[++Manager->Last] = Data;

        return true;
}判断顺序栈是否为空

//判断顺序栈是否为空
bool SeqStack_IsEmpty(SeqStack_t *Manager)
{
        return (-1 == Manager->Last) ? true : false;
}出栈

DataType_t SeqStack_Del(SeqStack_t *Manager)
{
       
        // 不为空时,如果为空系统默认返回-1
        if(Manager->Last >=0){
        return Manager->Bottom;
        }
}打印顺序栈中的元素

bool SeqStack_Print(SeqStack_t *Manager)
{
        //1.判断顺序栈是否为空
        if(SeqStack_IsEmpty(Manager)){
                return false;
        }
        for(int i=0;i<=Manager->Last;i++){
                printf("Manager[%d]=%d\n",i,Manager->Bottom);
        }
        return true;
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

勺缓曜 发表于 2025-10-26 06:33:57

感谢发布原创作品,程序园因你更精彩

懵诬哇 发表于 2025-12-11 17:04:43

这个好,看起来很实用

挫莉虻 发表于 2025-12-26 00:32:16

谢谢楼主提供!

晦险忿 发表于 2025-12-27 23:05:48

热心回复!

靳谷雪 发表于 2025-12-27 23:51:25

感谢分享,学习下。

闵雇 发表于 2026-1-8 23:20:52

用心讨论,共获提升!

屠焘 发表于 2026-1-10 05:44:32

分享、互助 让互联网精神温暖你我

凤患更 发表于 2026-1-13 03:50:09

yyds。多谢分享

嗅叽 发表于 2026-1-17 22:00:18

感谢分享,下载保存了,貌似很强大

褐洌 发表于 2026-1-20 08:23:06

这个有用。

兑谓 发表于 2026-1-20 22:51:49

感谢分享

班闵雨 发表于 2026-1-21 06:33:47

谢谢分享,辛苦了

泠邸 发表于 2026-1-21 19:18:51

感谢分享

缍米 发表于 2026-1-23 13:28:45

过来提前占个楼

剽达崖 发表于 2026-1-23 17:10:30

感谢分享

峰邑 发表于 2026-1-23 21:59:11

感谢,下载保存了

况雪柳 发表于 2026-1-24 09:50:32

很好很强大我过来先占个楼 待编辑

虹姥 发表于 2026-2-1 03:07:16

不错,里面软件多更新就更好了

卓卞恻 发表于 2026-2-4 08:21:33

感谢分享,学习下。
页: [1] 2
查看完整版本: 数据结构-顺序栈