顺序栈及其实现过程
目录
一、概念
二、顺序栈
2.1顺序栈的结构模型
2.2顺序栈的实现
2.2.1创建
2.2.2判断栈是否为空
2.2.3判断栈是否为空
2.2.4入栈
2.2.5出栈
2.2.6查看栈顶
2.2.7清空栈
2.2.8释放栈
一、概念
栈是限制在某一端进行插入、删除操作的线性表,俗称堆栈,允许操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”,栈的明显特点是“后入先出” (LIFO)

二、顺序栈
2.1顺序栈的结构模型
typedef int data_t;typedef struct{data_t *data;//指向栈的存储空间int maxlen; //当前栈的最大元素个数int top; //栈顶位置---类似数组下标
}sqstack;

不难看出有顺序表的影子,栈的存储空间就可以看作一张顺序表,只不过因为是栈,对于插入、取出操作有限制,另外还多了栈顶指针的概念
2.2顺序栈的实现
sqstack.h
typedef int data_t;typedef struct{data_t *data;//指向栈的存储空间int maxlen; //当前栈的最大元素个数int top; //栈顶位置---类似数组下标
}sqstack;sqstack* SqStack_create(int maxlen); //创建顺序栈,创建时指定存储空间大小
int SqStack_push(sqstack *s, data_t value); //入栈
data_t SqStack_pop(sqstack *s); //出栈
int SqStack_is_empty(sqstack *s); //判断栈是否为空
int SqStack_is_full(sqstack *s); //判断栈是否已满
data_t SqStack_seetop(sqstack *s); //查看栈顶
data_t SqStack_clear(sqstack *s); //清空栈
data_t SqStack_free(sqstack *s); //释放栈空间
2.2.1创建
根据2.1顺序栈的结构模型可知,创建时需要分配两块内存空间,因此要malloc申请两次
sqstack* SqStack_create(int maxlen)
{sqstack *s;//创建栈结构s = (sqstack*)malloc(sizeof(sqstack));if(s == NULL){printf("SqStack_create:malloc sqstack failed!\n");return NULL;}//初始化栈结构 存储空间申请和清空、赋值maxlen、tops->data = (data_t*)malloc(maxlen * sizeof(data_t));if(s->data == NULL){printf("SqStack_create:malloc data space failed!\n");free(s);//存储空间都申请失败了 申请的栈结构空间也没必要了 直接释放避免内存泄漏s = NULL;return NULL;}memset(s->data,0,maxlen * sizeof(data_t));s->maxlen = maxlen;s->top = -1;//0是栈底 maxlen-1是栈顶!!!return s;
}
2.2.2判断栈是否为空
int SqStack_is_empty(sqstack *s)
{//参数检查if(s == NULL){printf("SqStack_is_empty:sqstack passed is NULL!\n");return -1;}return (s->top == -1? 1 : 0);
}
2.2.3判断栈是否为空
int SqStack_is_full(sqstack *s)
{//参数检查if(s == NULL){printf("SqStack_is_full:sqstack passed is NULL!\n");return -1;}return (s->top == s->maxlen-1? 1 : 0);
}
2.2.4入栈
其实就和顺序表插入数据元素差不多,注意判断栈是否满了
int SqStack_push(sqstack *s, data_t value)
{//参数检查if(s == NULL){printf("SqStack_push:sqstack passed is NULL!\n");return -1;}//判断栈是否满了if(s->top == s->maxlen-1){printf("SqStack_push:sqstack is full!\n");return -1;}//入栈s->top++;s->data[s->top] = value;return 1;
}
2.2.5出栈
data_t SqStack_pop(sqstack *s)
{//参数检查if(s == NULL){printf("SqStack_pop:sqstack passed is NULL!\n");return -1;}s->top--;//执行出栈操作时 应由程序员自行检查栈是否为空 下面的检查是避免越界if(s->top < -1){s->top = -1;}return (s->data[s->top+1]);
}
2.2.6查看栈顶
data_t SqStack_seetop(sqstack *s)
{//参数检查if(s == NULL){printf("SqStack_seetop:sqstack passed is NULL!\n");return -1;}return (s->data[s->top]);
}
2.2.7清空栈
data_t SqStack_clear(sqstack *s)
{//参数检查if(s == NULL){printf("SqStack_clear:sqstack passed is NULL!\n");return -1;}memset(s->data,0,(s->maxlen) * sizeof(data_t));s->top = -1;return 1;
}
2.2.8释放栈
data_t SqStack_free(sqstack *s)
{//和创建相反 倒推回去释放所malloc的内存if(s == NULL)//参数检查{printf("SqStack_free:sqstack passed is NULL!\n");return -1;}if(s->data != NULL)//创建当中已经处理了为空的结果 malloc--free操作配对{free(s->data);}free(s);return 1;
}相关文章:
顺序栈及其实现过程
目录 一、概念 二、顺序栈 2.1顺序栈的结构模型 2.2顺序栈的实现 2.2.1创建 2.2.2判断栈是否为空 2.2.3判断栈是否为空 2.2.4入栈 2.2.5出栈 2.2.6查看栈顶 2.2.7清空栈 2.2.8释放栈 一、概念 栈是限制在某一端进行插入、删除操作的线性表,俗称堆栈&…...
内圆弧转子泵绘制工具开发
接着上期的Gerotor 泵的话题继续。最近有小伙伴找我开发一个内圆弧摆线泵的计算绘制工具,也就是把上次计算绘制的过程做成一个桌面应用工具,这样用起来会更方便、效率更高。那究竟是什么样的工具呢?一起来看看: 前面不是已经有了上…...
linux网络编程 | c | 多进程并发服务器实现
多进程并发服务器 基于该视频完成 11-多进程并发服务器思路分析_哔哩哔哩_bilibili 通过的是非阻塞忙轮询的方式实现的 和阻塞等待的区别就是,阻塞是真的阻塞了,而这个方式是一直在问有没有请求有没有请求 文章目录 多进程并发服务器1.核心思路&…...
Vins_Fusion_gpu中source setup.bash
文章目录 source setup.bashsetup.bashsetup.sh脚本的主要功能脚本的详细解释1. **初始化和检查**2. **检测操作系统**3. **设置环境变量**4. **记住 shell 类型**5. **调用 Python 脚本生成环境变量**6. **加载环境钩子**7. **清理** 总结 _setup_util.py_setup_util.py 的完整…...
怎么理解大模型推理时的Top_P参数?
本篇博客介绍一下大模型推理时的Top_P参数,Top_P与Top_K,Beamsearch,temperature 都是什么关系以及该如何选择Top_P参数。 文章目录 一、什么是Top_P参数?二、工作原理三、top_p和top_k是什么关系?四、Top_P和BeamSea…...
hive+hadoop架构数仓使用问题记录
使用问题记录 问题1:5条数据的表执行count(*)函数,很慢,43s才出结果? 该数仓的分析计算是基于hadoop的mapreduce分布式计算框架运行的,适用于大量/海量数据,少量数据,还是使用单体数据库快。也…...
前端的 Python 入门指南(三):数据类型对比 - 彻底的一切皆对象实现和包装对象异同
《前端的 Python 入门指南》系列文章: (一):常用语法和关键字对比(二):函数的定义、参数、作用域对比(三):数据类型对比 - 彻底的一切皆对象实现和包装对象异…...
Axios结合Typescript 二次封装完整详细场景使用案例
Axios 是一个基于 promise 的 HTTP 客户端,用于浏览器和 node.js。二次封装 Axios 主要是为了统一管理 HTTP 请求,例如设置统一的请求前缀、头部、超时时间,统一处理请求和响应的格式,以及错误处理等。 以下是一个使用 TypeScrip…...
基于Kubesphere实现微服务的CI/CD——部署微服务项目(三)
目录 一、kubesphere安装 1、安装本地持久存储 1.1、default-storage-class.yaml 1.2、 openebs-operator.yaml 1.3、安装 Default StorageClass 2、安装kubesphere 2.1、安装Helm 2.2、安装kubesphere 二、配置kubesphere 1、安装插件 2、创建devops项目 3、配置…...
【使用webrtc-streamer解析rtsp视频流】
webrtc-streamer WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或&a…...
element左侧导航栏
由element组件搭建的左侧导航栏 预览: html代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>首页</title><style> /*<!-- 调整页面背景颜色-->*/body{background-colo…...
【金融贷后】贷后运营精细化管理
文章目录 一、贷后专业术语讲解① 什么是贷后,贷后部是干什么的?② 贷后部门常见组织架构?③ 贷后专业术语有哪些? 二、贷后常用作业手段介绍① 贷后产品形态介绍?② 催收常用的方法? 三、贷后策略岗位介绍…...
学习CSS第七天
学习文章目录 一.交集选择器 一.交集选择器 使用多个条件符合的元素,可提高区分的精准度 元素配合类名是使用场景最多的 (元素必须是第一位,ID一般不写) <!DOCTYPE html> <html lang"zh-CN"> <head>…...
Image Stitching using OpenCV
文章目录 简介图像拼接管道特征检测和提取特征检测特征提取 特征匹配强力匹配FLANN(近似最近邻快速库)匹配 单应性估计扭曲和混合结论 使用opencv进行图像拼接 原为url: https://medium.com/paulsonpremsingh7/image-stitching-using-opencv-a-step-by-s…...
CentOS7 安装Selenium(使用webdriver_manager自动安装ChromeDriver)
在 CentOS 7 上安装 Selenium 通常涉及几个步骤,包括安装 Python、安装 Selenium 库、安装 WebDriver 以及配置环境。以下是详细的步骤: 1. 安装 Python 和 pip 如果你的系统中还没有安装 Python 和 pip,可以使用以下命令进行安装ÿ…...
鸿蒙手机文件目录
最近在开发鸿蒙,想把文件从电脑上发送到鸿蒙上我的手机APP的根目录,但是试了几次目录都不对,最后终于找到了,在这里记录一下 鸿蒙手机路径: /storage/media/100/local/files/Docs 将文件从电脑发送到手机:hdc file s…...
泷羽Sec学习笔记-Bp中ip伪造、爬虫审计
ip伪造与爬虫审计 ip伪造 下载插件:burpFakeIP 地址:GitHub - TheKingOfDuck/burpFakeIP: 服务端配置错误情况下用于伪造ip地址进行测试的Burp Suite插件 python版需要配置jython:下载地址:Maven Central: org.python:jython-…...
电子电工一课一得
首语 在现代社会中,电子电工技术已经渗透到我们生活的方方面面,从家用电器到工业自动化,从通信设备到智能系统,无一不依赖于电子电工技术。因此,掌握电子电工的基础知识,不仅对理工科学生至关重要…...
Cesium 限制相机倾斜角(pitch)滑动范围
1.效果 2.思路 在项目开发的时候,有一个需求是限制相机倾斜角,也就是鼠标中键调整视图俯角时,不能过大,一般 pitch 角度范围在 0 至 -90之间,-90刚好为正俯视。 在网上查阅了很多资料,发现并没有一个合适的…...
配置ssh-key连接github
GitHub 通过在 2022 年 3 月 15 日删除旧的、不安全的密钥类型来提高安全性。 具体内容参考如下链接 https://docs.github.com/zh/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent mac配置 ssh-keygen -t ed25519 -C …...
MixText+BERT还能这么玩?手把手复现FPMT论文中的‘概率伪混合’黑科技
解密FPMT论文中的概率伪混合:BERT隐藏层的动态插值艺术 在自然语言处理领域,数据增强一直是提升模型泛化能力的关键技术。传统MixText方法通过线性插值在输入层混合样本,但这种"一刀切"的方式忽视了不同样本对模型训练的差异化价值…...
4步打造高效能开源路由器:OpenWrt固件安装指南
4步打造高效能开源路由器:OpenWrt固件安装指南 【免费下载链接】openwrt openwrt编译更新库X86-R2C-R2S-R4S-R5S-N1-小米MI系列等多机型全部适配OTA自动升级 项目地址: https://gitcode.com/GitHub_Trending/openwrt5/openwrt OpenWrt固件安装是提升R5S设备性…...
革新性植物大战僵尸全能修改工具:重定义游戏体验
革新性植物大战僵尸全能修改工具:重定义游戏体验 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 植物大战僵尸辅助工具PVZ Toolkit是一款专为经典游戏《植物大战僵尸》PC版设计的开源修…...
告别996!用Google Antigravity的Agent-First模式,5分钟搞定React Native与Android原生桥接模块
告别996!用Google Antigravity的Agent-First模式,5分钟搞定React Native与Android原生桥接模块 如果你是一位长期奋战在Android与React Native混合开发一线的工程师,一定对"桥接模块"这个词汇又爱又恨。每当产品经理提出"我们…...
实测避坑:用华为Atlas 300I DUO推理卡跑Qwen1.5-14B,性能对比3090和配置踩坑全记录
华为Atlas 300I DUO推理卡实战评测:Qwen1.5-14B部署全流程与性能深度对比 当国产AI加速卡遇上千亿参数大模型,会碰撞出怎样的火花?最近半年,我陆续测试了市面上主流的7款推理加速设备,这次终于轮到华为Atlas 300I DUO这…...
超实用AI专著生成攻略,掌握工具技巧,轻松搞定大型学术著作
学术专著创作困境与AI写作工具解决方案 撰写学术专著时的困难,不仅仅体现在“能够写出来”,更关键的是“能够成功出版并获得认可”。在当今的出版行业,学术专著的受众群体相对较小,出版社在选择题材时,对其学术价值以…...
万兆NAS成本大揭秘:用MicroServer Gen8+二手X520网卡搭建全流程(含读写性能实测)
万兆NAS成本大揭秘:用MicroServer Gen8二手X520网卡搭建全流程(含读写性能实测) 在追求高速网络存储的时代,万兆NAS已成为技术爱好者的新宠。本文将带你深入了解如何以最低成本搭建一套性能不俗的万兆NAS系统,核心硬件…...
SVN检出报错大全:从E170011到E120106的实战解决手册(附cleanup的正确用法)
SVN检出报错实战指南:从E170011到E120106的深度解析与解决方案 引言:SVN检出报错的常见场景与应对思路 在团队协作开发中,版本控制系统扮演着至关重要的角色。作为集中式版本控制的代表,SVN(Subversion)至今…...
RMBG-2.0模型量化压缩:减小体积提升速度
RMBG-2.0模型量化压缩:减小体积提升速度 1. 引言 抠图工具RMBG-2.0确实效果惊艳,但原版模型动不动就几个GB的大小,在普通电脑上跑起来慢吞吞的,更别说在手机或边缘设备上部署了。如果你也遇到过模型太大、推理太慢的问题&#x…...
ScanTailor Advanced终极指南:免费开源扫描文档处理完整解决方案
ScanTailor Advanced终极指南:免费开源扫描文档处理完整解决方案 【免费下载链接】scantailor-advanced ScanTailor Advanced is the version that merges the features of the ScanTailor Featured and ScanTailor Enhanced versions, brings new ones and fixes. …...
