当前位置: 首页 > 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.hskmm.com/?act=detail&tid=31783

相关文章:

  • Erlang 的英文数字验证码识别系统设计与实现
  • 使用Django从零开始构建一个个人博客系统 - 实践
  • 2025年磨床厂家TOP企业品牌推荐排行榜,平面磨床,外圆磨床,数控平面磨床,数控外圆磨床,7163平面磨床推荐这十家公司!
  • cifar10
  • [LangChain] 02. 模型接口
  • 摄像头调试
  • C语言学习——字符串数据类型
  • 感知节点@4@ ESP32+arduino+ 第二个程序 LED灯显示
  • WebGL学习及项目实战(第02期:绘制一个点)
  • 2025 年 10 月国内加工中心制造商最新推荐排行榜:涵盖立式、卧式、龙门及多规格型号!
  • display ip routing-table protocol ospf 概念及题目 - 详解
  • C语言学习——小数数据类型
  • 高敏感人应对焦虑
  • Palantir本体论以及对智能体建设的价值与意义
  • 2025 年执业兽医资格证备考服务机构推荐榜,执业兽医资格证培训机构/执兽考试机构/考试辅导机构获得行业推荐
  • [LangChain] 基本介绍
  • 题解:P6755 [BalticOI 2013] Pipes (Day1)
  • Palantir 的“本体工程”的核心思路、技术架构与实践示例
  • P14164 [ICPC 2022 Nanjing R] 命题作文
  • C语言学习——整数变量
  • 语音合成技术从1秒样本学习表达风格
  • 我的高敏感和家人
  • 对称多项式
  • usb储存之BOT/UAS内核驱动
  • 简述flux思想?
  • 风控评分卡
  • 20232428 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • JAVA对象内存布局
  • 20232409 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • 10月15号