3.1.2_栈的顺序存储实现

知识总览:

顺序栈的定义:

顺序栈是用顺序存储实现的 ,代码定义方式和顺序表类似(啥是顺序表来着???)

定义一个顺序栈struct结构体SqStack,结构体中有静态数组data来存放栈里边的元素+1个int型的top指针用来指向栈顶元素(该指针一般记录的是栈顶元素的索引下标,data数组索引下标从0开始),声明一个顺序栈SqStack S;后会在内存分配一块连续的内存空间(应该是因为是顺序存储),空间大小为data数组中的每个元素所占空间大小*元素个数(MaxSize * sizeOf(ElemType))+top指针占用空间(int型的占4Byte),比如说空间大小是10,依次压栈进入5个元素a、b、c、d、e,则现在top指向e元素的位置(不是指向没有元素的最上方),即top=4(e的索引下标)

声明栈SqStack S:

此时栈里边data数组元素为空,即栈顶元素为空,则让top指针指向-1位置,而不是data[0]位置==》因此,判断栈空,就用S.top==-1即可

以下为S.top指针指向栈顶元素位置(即开始栈顶元素为空,则指向-1位置)====》现在时,和压栈元素同呼吸共命运

初始化栈:

让top指针指向-1位置,即S.top == -1;

进栈操作:

因为数组的长度是固定的,所以每次进栈前都要判断指向栈顶元素的top指针表示的索引位置==Maxsize-1,相等这表示要数组下标越界了,注意每次top指针指向的索引位置都是要进来的元素位置,所以每次进栈的时候都要让当前的top+1先操作,再把元素放到top+1位置,即让top先挪位置,再把元素放进来,++top前++,先自身+1再执行操作

出栈操作:

出栈前先判断栈里边还有没有元素即判断栈是否空,有元素才出栈,即用S.top==-1判断,出栈要把出栈元素返回用引用X返回,出栈时只是把数组里的元素逻辑上删除了,但是该元素还依然存在内存(因为该元素用X返回了),出栈时先把该元素出栈再让S.top-1,即先让当前栈顶元素腾地出去赋值给X,再让栈顶元素指针下移,先操作再自身-1,S.top--

读栈顶元素操作:

和上边出栈类似,只是没有S.top指针下移,只是把栈顶元素返回,栈顶元素依然不变

以下为栈顶指针指向下一个元素可以插入的位置(即开始栈为空,下一个元素要插入的位置是0,即让栈顶指针指向0位置)===》未来式,等待式,即栈顶指向的位置肯定是没值的:

故判断栈空用S.top==0,进栈时判断栈满用S.top==MaxSize,出栈时栈空用S.top==0,出栈时先S.top-1先把指针下移指向要出栈的元素位置

回收栈:即让栈顶指针指向-1,即让栈空即可,然后内存中的空间自动回收,不用使用malloc函数

缺点:顺序栈是用静态数组存储实现的,静态数组长度固定,导致栈的大小不可改变,可以用链式存储的方式实现改变缺点,也可以开始申请一大片连续的内存空间,但是申请了不用又浪费,

共享栈:

2个栈共用一片连续的内存空间,解决申请一大片连续内存空间浪费的情况

2个栈有2个栈顶指针,开始2个栈都为空,0号栈栈顶指针指向-1,1号栈栈顶指针指向MaxSize【即2个栈顶指针用的都是现在式,要入栈的话,0号栈先top+1,1号栈先top-1】,即0号栈入栈从下往上走,1号栈入栈从上往下走,当0号栈的S.top+1==1号栈的S.top,或者1号栈的S.top-1==0号栈的S.top证明共享栈已满,2个栈物理上共用一块连续空间

 

知识回顾:

 

 。。。。。。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/83784.shtml

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

相关文章

JavaEE初阶第一期:计算机是如何 “思考” 的(上)

专栏:JavaEE初阶起飞计划 个人主页:手握风云 一、冯诺依曼体系结构 1.1. 概念 冯诺依曼体系结构(Von Neumann Architecture),是现代计算机的基础设计概念,核心思想是“存储程序控制”。具体来说&#xff0c…

SQL Server全局搜索:在整个数据库中查找特定值的高效方法

SQL Server全局搜索:在整个数据库中查找特定值的高效方法 一、需求背景:为什么需要数据库全局搜索? 在数据库管理和开发过程中,我们经常会遇到这样的场景: 只记得某个数据值,但忘记了它所在的表或列需要…

万物皆数:构建数字信号处理的数学基石

万物皆数:构建数字信号处理的数学基石 欢迎来到数字信号处理(DSP)的世界。在这里,声音、图像、通信信号、医疗数据……一切信息都被转化为一串串冰冷的数字。然而,正是通过对这些数字的精妙运算,我们得以实…

到院率最高提升40%,消费医疗用AI营销机器人跑赢增长焦虑

当前,消费医疗机构普遍依赖人工咨询师进行客户接待和营销咨询。然而,专业咨询师缺口高达20万人,大量“护士转咨询”“销售转咨询”现象导致方案设计专业性不足,客户投诉率提升40%。人工客服不仅医学知识薄弱,学习能力有…

【推荐算法】注意力机制与兴趣演化:推荐系统如何抓住用户的心?

注意力机制与兴趣演化:推荐系统如何抓住用户的心? 一、算法背景知识:从静态推荐到动态感知1.1 传统推荐系统的局限性1.2 人类注意力机制的启示 二、算法理论/结构:动态兴趣建模革命2.1 DIN(深度兴趣网络)&a…

快速入门:创建 Azure 数据资源管理器群集和数据库

前言 Azure 数据资源管理器是 Microsoft 提供的一项快速、完全托管的数据分析服务。 它允许用户分析来自应用程序、网站、物联网设备等的海量数据流,从而简化复杂的数据探索。 它能够处理数 PB 的数据,并支持快速检索数据以进行分析。 主要特点 高性能:ADX 针对快速数据提…

Redis集群模式之Redis Cluster(2)

上篇文章我们讲解了Redis Cluster中的主要模块和两种重定向方式,这篇文章我们来讲解一下Redis Cluster的状态监测和维护。 Redis Cluster状态监测及维护 要讲解Redis Cluster中节点的状态如何维护,我们要先知道Redis Cluster中的节点有哪些状态&#xf…

Step-Audio-AQAA 解读:迈向「纯语音」交互的端到端 LALM 新里程

引言:AI 从听到说 大型音频语言模型(Large Audio-Language Models, LALMs)正在彻底改变我们与机器交互的方式。我们不再满足于简单的文本问答,而是期望 AI 能够像人类一样,通过自然的语音进行交流,理解我们的意图,并以富有表现力的声音回应。然而,构建一个能够直接从语…

基于边缘计算的丝杆状态实时监测系统设计?

基于边缘计算的丝杆状态实时监测系统设计,可从系统架构、各层功能设计、关键技术应用等方面入手,以下为详细介绍: 系统架构设计 基于边缘计算的丝杆状态实时监测系统通常由感知层、边缘层和云端三部分组成。感知层负责数据采集,…

LeetCode 每日一题 2025/6/9-2025/6/15

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 6/9 440. 字典序的第K小数字6/10 3442. 奇偶频次间的最大差值 I6/11 3445. 奇偶频次间的最大差值 II6/12 3423. 循环数组中相邻元素的最大差值6/13 2616. 最小化数对的最大…

PyTorch张量操作中dim参数的核心原理与应用技巧:

今天在搭建神经网络模型中重写forward函数时,对输出结果在最后一个维度上应用 Softmax 函数,将输出转化为概率分布。但对于dim的概念不是很熟悉,经过查阅后整理了一下内容。 PyTorch张量操作精解:深入理解dim参数的维度规则与实践…

Day 31

1. 规范的文件命名 核心原则: 清晰明确:文件名应准确描述内容(如data_preprocessing.py) 风格统一: 推荐小写下划线(Python惯例,如model_training.py) 或使用驼峰式&#xff08…

学习Oracle------认识VARCHAR2

学习Oracle------认识VARCHAR2 VARCHAR2 是 Oracle 数据库中专门用于存储可变长度字符串的数据类型,它是 Oracle 对标准 SQL 数据类型 VARCHAR 的增强和替代。以下是全面解析: 核心概念 名字含义: VAR Variable(可变&#xff09…

记录jackson解析出错

Jackson 属性名大小写 Bug 记录 问题描述 在前后端交互过程中,前端传递的 JSON 字段名为驼峰风格(如 qTitle),后端 Java 实体类字段名也为驼峰(如 private String qTitle;)。 但在反序列化时,…

泰国数码电商系统定制|3C产品详情泰语化+售后管理,适配泰国数码零售

随着全球数字化的加速,电商行业正在迅速发展,尤其是以泰国为代表的东南亚市场。泰国不仅是一个拥有庞大消费者群体的市场,而且其日益增长的互联网使用率和手机普及率使得数码产品的销售潜力巨大。在这样的大背景下,针对泰国市场的…

59、定制化原理-SpringBoot定制化组件的几种方式

59、定制化原理-SpringBoot定制化组件的几种方式 在Spring Boot中,定制化组件的方式多样,以下是几种常见的方法及其原理: #### 修改配置文件 通过修改application.properties或application.yml文件,利用ConfigurationProperties注…

机器学习--分类

阳性(Positive)和阴性(Negative) 阳性(Positive) 正类:通常指的是我们关注的类别或事件;阴性(Negative) 负类: 指的是与阳性相反的类别或事件。…

三星MZQL2960HCJR-00BAL高性能固态硬盘控制器SSD云计算和高端存储专用 电子元器件解析

MZQL2960HCJR-00BAL 电子元器件解析 1. 基本类型与功能 MZQL2960HCJR-00BAL 是 三星(Samsung) 推出的一款 企业级NVMe SSD主控芯片,属于 高性能固态硬盘控制器,专为 数据中心、云计算和高端存储 设计。 关键特性: 接…

Blender——建构、粒子、灯光、动画

Blender是一款开源的三维建模和动画软件,可用于创建3D模型、动画、渲染图像和视频,还支持雕刻、纹理绘制、粒子系统等功能。 建构篇: 基本操作: 视角的控制: 控制观察视角: 鼠标中键 平移视图: Shift鼠标中键 缩放视…

节日快乐啊

<section data-role"paragraph" class"_135editor"> <p> <br/> </p> </section> <p> 玛哈特2025中国国际金属成形展览会邀请函 </p><style>* { margin: 0; …