顺序栈及其实现过程
目录
一、概念
二、顺序栈
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 …...
Linux——进程控制模拟shell
1.进程创建 我们在之前的文章中介绍过进程创建的方法,可以通过系统调用接口fork来创建新的进程。 fork在创建完新的子进程之后,返回值是一个pid,对于父进程返回子进程的pid,对于子进程返回0。fork函数后父子进程共享代码ÿ…...
【HarmonyOS】鸿蒙应用实现手机摇一摇功能
【HarmonyOS】鸿蒙应用实现手机摇一摇功能 一、前言 手机摇一摇功能,是通过获取手机设备,加速度传感器接口,获取其中的数值,进行逻辑判断实现的功能。 在鸿蒙中手机设备传感器ohos.sensor (传感器)的系统API监听有以下…...
Kael‘thas Sunstrider Ashes of Al‘ar
Kaelthas Sunstrider 凯尔萨斯逐日者 <血精灵之王> Kaelthas Sunstrider - NPC - 魔兽世界怀旧服TBC数据库_WOW2.43数据库_70级《燃烧的远征》数据库 Ashes of Alar 奥的灰烬 (凤凰 310%速度) Ashes of Alar - Item - 魔兽世界怀旧服TBC数据…...
CNCF云原生生态版图
CNCF云原生生态版图 概述什么是云原生生态版图如何使用生态版图 项目和产品(Projects and products)会员(Members)认证合作伙伴与提供商(Certified partners and providers)无服务(Serverless&a…...
渐冻症:真的无药可治?
“渐冻症”,这个令人闻之色变的疾病,仿佛是生命的冷酷冰封者。一提到渐冻症,很多人脑海中立刻浮现出绝望的画面,认为它无药可治。但事实真的如此吗? 渐冻症,医学上称为肌萎缩侧索硬化症,是一种渐…...
`pg_wal` 目录
在 PostgreSQL 中,自动清理 pg_wal 目录主要通过配置参数 min_wal_size、max_wal_size 和 wal_keep_size 来实现。以下是如何配置 PostgreSQL 以自动清理 WAL 文件的详细步骤和建议: 配置 min_wal_size 和 max_wal_size: min_wal_size&#x…...
【信息系统项目管理师】论文:论信息系统项目的整合管理
文章目录 正文一、制定项目章程二、指定项目管理计划三、指导与管理项目工作四、管理项目知识五、监控项目工作六、实施整体变更控制七、结束项目或阶段 正文 根据省自然资源厅的总体部署,XX市决定于2023年8月开始全市不动产登记系统建设,要求在2024年8…...
MATLAB深度学习(七)——ResNet残差网络
一、ResNet网络 ResNet是深度残差网络的简称。其核心思想就是在,每两个网络层之间加入一个残差连接,缓解深层网络中的梯度消失问题 二、残差结构 在多层神经网络模型里,设想一个包含诺干层自网络,子网络的函数用H(x)来表示&#x…...
freeswitch(配置event_socket连接)
亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 如果想使用代码进行控制freeswitch添加账号、获取注册信息、强拆等,可以使用ESL控制vim autoload_configs/event_socket.conf.x…...
C++ SQLite轻量化数据库使用总结
官网下载:https://www.sqlite.org/download.html 示例1 #include <iostream> #include <sqlite3.h>int main() {sqlite3* db;char* zErrMsg 0;int rc;// 打开数据库连接(如果数据库不存在,则会自动创建)rc sqlite…...
如何提高网站的安全性/uc推广登录入口
DBSCAN-SWA:一行命令识别并注释溶源噬菌体DBSCAN-SWA: an integrated tool for rapid prophage detection and annotation介绍DBSCAN-SWA是一个结合了具有噪音的密度聚类算法(density-based spatial clustering of applications with noise, DBSCAN-SWA)和滑动窗口算…...
c2c网站开发策划/公众号软文是什么意思
Latex基本语法的备忘录 Latex基本语法前言一、常见的数学符号1. 数学上的“**属于**”、“**不属于**”符号。2. 数学的矩阵的**转置符号**书写。3. 数学中求和公式。4.数学中字母代上标5.数字或公式上添加方框6.数学分式7.数学公式中在某些符号下添加花括号8.数学中的垂直符号…...
凡客建站登陆/网络运营与推广
1. Is_numeric类型转换缺陷 PHP提供了is_numeric函数,用来判断变量是否为数字。PHP弱类型语言的一个特性,当一个整型和一个其他类型行比较的时候,会先把其他类型intval数字化再比。 来看看代码: 访问之 首先对GET方式提交的参数id的值进行检验。id通过is_numeric函数来…...
大理中小企业网站建设/营销推广软文案例
CK_Label_v13一、产品参数 1. 电池供电版 产品型号 CK_Label_v13 尺寸 70x34.7x13.6mm 屏幕尺寸 2.1 inch 分辨率 250*122 像素密度 130dpi 显示技术 电子墨水屏显示 显示颜色 黑/白 外观颜色 黑色 按键 1 指示灯 1 RGB灯 灯光颜色 7种(红/绿/蓝/黄/紫/白…...
台州网站设计/恩城seo的网站
开发jQuery插件时总结的一些经验分享一下。 一、先看 jQuery(function(){ }); 全写为 jQuery(document).ready(function(){ }); 意义为在DOM加载完毕后执行了ready()方法。 二、再看 (function(){ })(jQuery); 其实际上是执行()(para)匿名方法,只不过是传递了jQuery…...