数据结构-顺序栈

news/2025/10/15 19:53:43/文章来源:https://www.cnblogs.com/yuhengwang/p/19144131

数据结构-顺序栈

/**************************************************************************** * @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.mzph.cn/news/937755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Erlang 的英文数字验证码识别系统设计与实现

一、引言 验证码(CAPTCHA)作为互联网中抵御自动化攻击的重要安全机制,被广泛用于登录验证、注册防刷、评论防机器人等场景。 传统验证码识别常用 Python 或 C++ 实现,而本文将介绍如何用 Erlang 来构建一个基础的英…

使用Django从零开始构建一个个人博客系统 - 实践

使用Django从零开始构建一个个人博客系统 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

2025年磨床厂家TOP企业品牌推荐排行榜,平面磨床,外圆磨床,数控平面磨床,数控外圆磨床,7163平面磨床推荐这十家公司!

当前磨床市场竞争愈发激烈,产品质量参差不齐,不少企业在选购磨床时面临诸多难题。部分厂家缺乏严格的质量管控体系,生产的磨床精度不足、稳定性差,难以满足汽车摩托车、工程机械、军工等行业对加工精度的高要求;还…

cifar10

import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from multiprocessing import freeze_support import sys 1. 加载和预处理数据 d…

[LangChain] 02. 模型接口

LangChain 支持两类主流语言模型:文本补全模型 对话模型文本补全模型 Text Completion Models 这类模型以一段纯文本作为输入,输出结果是一段连续生成的文字(这里的输出文本其实就是对前面输入文本的一个补全),不…

摄像头调试

camera调试经验分享 收藏 一 关于Sensor预览时有条纹: 1。电源不稳定,CMOS sensor对电源的稳定度蛮高的。 2。同步信号受干扰,彩色条纹显然是每行数据中有信号丢失造成。 3。检查mclk和pclk以及他们的ratio,软件…

软件工程作业-报告1 - 实践

软件工程作业-报告1 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

C语言学习——字符串数据类型

字符串的数据类型只有char来进行定义,相对之前的来讲较少同样打印的内容需要用引号来进行标注,同时也可以用与整数和小数的方法来进行测量字节 接下来我们对以上三种数据类型进行一个总结和概括: > 所有整数,小…

感知节点@4@ ESP32+arduino+ 第二个程序 LED灯显示

1、查看电路图,那个ESP32的引脚连接LED灯 图中看到是IO2 2、查找和打开例程Blink 3、按照电路图,定义引脚编号 4)编译下载固件 点击“上传”按钮,同时一直按住电路板上的BOOT(IO0)按钮,直到开始下载固件…

WebGL学习及项目实战(第02期:绘制一个点)

@目录目标WebGL原理示意图着色器顶点着色器:片元着色器:着色器代码如下web端(js)js代码代码结构梳理流程图完整代码(可直接在浏览器中查看)运行效果 目标使用WebgL绘制一个点 了解整个绘制的编写流程并进行梳理和…

2025 年 10 月国内加工中心制造商最新推荐排行榜:涵盖立式、卧式、龙门及多规格型号!

当前加工中心市场厂商数量繁杂,产品质量、技术实力与服务水平差异显著,汽车摩托车、工程机械、军工等行业采购方在挑选设备时,常面临不知如何辨别优质厂商、耗费大量时间调研却难觅适配产品的困境。部分厂商存在技术…

display ip routing-table protocol ospf 概念及题目 - 详解

display ip routing-table protocol ospf 概念及题目 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

C语言学习——小数数据类型

> 小数的数据类型分为:float、double > 不同的数据类型所表示的范围和内存大小都不一样可以用,由编译器来决定,可以用sizeof来决定 > 小数的取值范围比整数的大 > c语言的的小数默认double联系的…

高敏感人应对焦虑

2️⃣ 注意力外投法:从内心的泥潭中抽身 烦躁和无法学习,往往是因为注意力被困在了内心的思虑中。我们需要强行把它拉出来,投向外部世界。5-4-3-2-1感官法:具体操作:无论在何处,立刻(在心里或小声地)说出:5 个…

kali构建PHP_MYSQL

kali构建PHP_MYSQL配置Mysql sudo mysql -u root //第一次可以直接进入 alter user root@localhost identified by 123456; create database usr;配置PHP 进入目录:cd /etc/php/8.2/apache2 执行:sudo vim +904 php.in…

Palantir本体论以及对智能体建设的价值与意义

Palantir本体论以及对智能体建设的价值与意义 赋能智能体:Palantir Foundry本体工程如何构建企业级AI的“可编程数字孪生”摘要: 随着大语言模型(LLM)驱动的智能体(AI Agent)成为企业数字化的核心驱动力,传统的…

2025 年执业兽医资格证备考服务机构推荐榜,执业兽医资格证培训机构/执兽考试机构/考试辅导机构获得行业推荐

随着养殖业规模化发展与行业规范化推进,执业兽医资格证已成为从业人员开展专业工作的核心凭证,对应的备考需求逐年增长。但当前市场上,执业兽医资格证备考服务机构在课程适配性、师资专业性、服务响应效率等方面存在…

[LangChain] 基本介绍

在大模型时代,LangChain 是一个帮助开发者快速构建“智能应用” 的工具框架。它像是你搭建 AI 应用时的“万能胶水”——把大模型(如 OpenAI、LLM API)、工具(如搜索引擎、数据库)、记忆能力、链式调用等模块统统…

题解:P6755 [BalticOI 2013] Pipes (Day1)

P6755:构造、图论、拓扑排序、线性代数。题目等价于:给定一个无向图和所有点的点权,给每条边确定一个边权,使得每个点的点权等于与其相连所有边的边权和除以二。特别地,如果无解或有无数解,只需输出 \(0\) 即可。…