当前位置: 首页 > 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.jsqmd.com/news/14290/

相关文章:

  • 实用指南:NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程
  • Erlang 的英文数字验证码识别系统设计与实现
  • 使用Django从零开始构建一个个人博客系统 - 实践
  • 2025年磨床厂家TOP企业品牌推荐排行榜,平面磨床,外圆磨床,数控平面磨床,数控外圆磨床,7163平面磨床推荐这十家公司!
  • cifar10
  • [LangChain] 02. 模型接口
  • 摄像头调试
  • 软件工程作业-报告1 - 实践
  • WebGL学习及项目实战(第02期:绘制一个点)
  • C语言学习——小数数据类型
  • 高敏感人应对焦虑
  • kali构建PHP_MYSQL
  • Palantir本体论以及对智能体建设的价值与意义
  • 2025 年执业兽医资格证备考服务机构推荐榜,执业兽医资格证培训机构/执兽考试机构/考试辅导机构获得行业推荐
  • [LangChain] 基本介绍
  • 题解:P6755 [BalticOI 2013] Pipes (Day1)
  • 深度学习调试记录 - 详解
  • Palantir 的“本体工程”的核心思路、技术架构与实践示例
  • 语音合成技术从1秒样本学习表达风格
  • display ospf peer brief 概念及题目 - 实践
  • 我的高敏感和家人
  • 对称多项式
  • usb储存之BOT/UAS内核驱动
  • 风控评分卡
  • 字符串操作函数
  • JAVA对象内存布局
  • 20232409 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • 10月15号
  • 记录一次客户现场环境,银河麒麟V10操作系统重启后,进入登录页面后卡死,鼠标键盘无响应的解决过程
  • 图 生成树