尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

数据结构-顺序栈

数据结构-顺序栈
📅 发布时间:2026/6/21 13:40:29

数据结构-顺序栈

/**************************************************************************** * @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);}

相关新闻

  • 摄像头调试
  • C语言学习——字符串数据类型
  • Palantir本体论以及对智能体建设的价值与意义

最新新闻

  • 5分钟终结乱码烦恼:EncodingChecker让文件编码检测变得如此简单
  • 佛山大学在全国 / 省内排名多少?是不是双一流 / 省重点院校? - 寻茫精选
  • 3DS自制软件终极指南:如何使用Universal-Updater一键管理所有应用
  • CentOS 6 Postfix 安装配置实战:从源失效到生产可用
  • 2026年6月沈阳营业性演出许可证一站式代办推荐 - 速递信息
  • 2026年品牌出海跨境电商系统推荐:技术架构与跨境适配深度测评 - 科技焦点

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号