当前位置: 首页 > news >正文

数据结构-顺序栈

数据结构-顺序栈

/**************************************************************************** * @name:   sequencelstack  * @author: 王玉珩* @date:   2025/10/07** *CopyRight (c) 2025-2026 All Right Reserved* *************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>typedef int DataType_t;     //用户自定义指针类型//定义记录顺序栈参数的结构体
typedef struct SequenStack   
{DataType_t * Bottom;    //栈底地址unsigned int Size;      //栈容量int          Top;       //栈顶元素下标}SeqStack_t;                //别名  /**************************************************************************** * @name      	SeqStackt_Create* @brief 		初始化栈* @param		unsigned int size:栈容量* * @retval		point** @author		https://www.cnblogs.com/yuhengwang* *************************************************************************/
SeqStack_t * SeqStackt_Create(unsigned int size)
{SeqStack_t *Manager = (SeqStack_t *)calloc(1,sizeof(SeqStack_t));             //申请堆内存,用于管理顺序栈//判断堆内存是否申请成功if (NULL == Manager){perror("calloc memory for Manager is failled");exit(-1);                                                                //失败退出程序}Manager->Bottom = (DataType_t *)calloc(size,sizeof(DataType_t));             //为顺序栈申请堆内存//判断堆内存是否申请成功if (NULL == Manager->Bottom){perror("calloc memory for Stack is failled");free(Manager);                                                           //失败后释放顺序栈管理内存exit(-1);}Manager->Size = size;                                                       //顺序栈容量Manager->Top = -1;                                                          //顺序栈栈顶,初值为-1return Manager;                                                             //返回用于管理顺序栈的内存地址
}/**************************************************************************** * @name      	SeqStack_IsFull* @brief 		判断顺序栈是否已满* @param		Manager:管理体地址* * @retval		bool** @author		https://www.cnblogs.com/yuhengwang* *************************************************************************/
bool SeqStack_IsFull(SeqStack_t *Manager)
{return (Manager->Size - 1 == Manager->Top) ? true : false;    //已满返回true,未满返回false
}/**************************************************************************** * @name      	SeqStack_IsFull* @brief 		入栈* @param		Manager:管理体地址* * @retval		bool** @author		https://www.cnblogs.com/yuhengwang* *************************************************************************/
bool SeqStack_Push(SeqStack_t *Manager , DataType_t Data)
{if (SeqStack_IsFull(Manager))                               //调用SeqStack_IsFull判断顺序表是否已满{                              printf("SeqStack Full is Full!\n");                     //顺序表已满,退出此函数return false;   }Manager->Bottom[++Manager->Top] =  Data;                    //添加元素,实际容量+1  return true;
}/**************************************************************************** * @name      	SeqStack_Pop* @brief 		判断顺序栈是否空* @param		Manager:管理体地址* * @retval		bool** @author		https://www.cnblogs.com/yuhengwang* *************************************************************************/
bool SeqStack_IsEmpty(SeqStack_t *Manager)
{return -1 == Manager->Top ? true : false;                    //已空返回true
}/**************************************************************************** * @name      	SeqStack_Pop* @brief 		出栈* @param		Manager:管理体地址* * @retval		DataType_t** @author		https://www.cnblogs.com/yuhengwang* *************************************************************************/
DataType_t SeqStack_Pop(SeqStack_t *Manager)
{DataType_t temp = 0;                                       //记录弹栈元素的值//调用SeqStack_IsEmpty函数判断顺序栈是否为空,顺序表为空,退出此函数if (SeqStack_IsEmpty(Manager)){printf("SeqStack is Empty!\n");       return ;} temp = Manager->Bottom[Manager->Top--];return temp;
}/**************************************************************************** * @name      	SeqStack_Print* @brief 		遍历* @param		Manager:管理体地址* * @retval		** @author		https://www.cnblogs.com/yuhengwang* *************************************************************************/
void SeqStack_Print(SeqStack_t *Manager)
{for (int i = 0; i <= Manager->Top; i++){printf("Element[%d]=%d\n",i,Manager->Bottom[i]);}
}int main(int argc,const char * argv[])
{SeqStack_t *Manager = SeqStackt_Create(10);SeqStack_Push(Manager,10);SeqStack_Push(Manager,15);SeqStack_Push(Manager,20);SeqStack_Pop(Manager);SeqStack_Print(Manager);}
http://www.rkmt.cn/news/21779.html

相关文章:

  • 摄像头调试
  • C语言学习——字符串数据类型
  • Palantir本体论以及对智能体建设的价值与意义
  • 深度学习调试记录 - 详解
  • C语言学习——整数变量
  • 简述flux思想?
  • 20232428 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 字符串操作函数
  • JAVA对象内存布局
  • 10月15号
  • DolphinScheduler 3.1.9 单机版重启后,项目、流程定义等数据全部丢失
  • 洛谷题单指南-进阶数论-CF776B Sherlock and his girlfriend
  • 日总结 12
  • 2025年太阳能板趋势与智能选择指南
  • 10/15
  • 深入解析:Nodejs开发环境搭建
  • 项目管理:PERT/CPM
  • 可信AI研究获资助,10位博士生探索算法公平与隐私
  • 实用指南:【在Ubuntu 24.04.2 LTS上安装Qt 6.9.2】
  • 在AI技术快速实现创意的时代,挖掘邮件营销系统新需求成为关键突破点
  • RoI Pooling / Align
  • 时延估计算法ETDGE的解析
  • 2025年10月最新房产信息公布:西安买房新楼盘口碑推荐榜单Top10精选
  • 备忘录:IDA*
  • 基于DSP28335的SVPWM矢量控制实现
  • 2025 年钢制拖链源头厂家最新推荐排行榜:聚焦优质品牌助力企业精准选购,破解市场选型难题
  • AI降噪、实时响应、闭环治理的政务数据安全管理方案 ——全知科技与教育部学位与研究生教育发展中心合作案例
  • 多维协同 一键化部署 合规可控的运营商数据安全管理方案
  • 学习随笔一:低代码开发与 SQL 核心知识
  • D. MAD Interactive Problem