数据结构速成--栈

由于是速成专题,因此内容不会十分全面,只会涵盖考试重点,各学校课程要求不同 ,大家可以按照考纲复习,不全面的内容,可以看一下小编主页数据结构初阶的内容,找到对应专题详细学习一下。
目录
一、栈的基本概念
二、栈的存储结构
1. 顺序栈的实现
2. 顺序栈的基本实现
2.1 初始化
2.2 判断栈空
2.3 数据进栈
2.4 数据出栈
3. 共享栈
4. 栈的链式存储结构
三、栈的使用场景
一、栈的基本概念
栈是只允许在一端进行插入或删除操作的线性表。限定这种线性表只能在某一端进行插入和删除操作。栈操作的特性是后进先出。
栈顶:线性表允许进行插入删除的那一端。
栈底:不允许进行插入和删除的另一端。
空栈:不含任何元素的空表。

n个不同元素进栈,出栈元素不同排列的个数为。

第一部分大家记清楚栈只能从栈顶插入和删除,以及后进先出的特性,还要知道出栈种类计算。
二、栈的存储结构
栈是一种操作受限的线性表,类似于线性表,它也有对应的两种存储方式。
1. 顺序栈的实现
采用顺序存储的栈称为顺序栈,它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针top指向当前栈顶元素的位置。
#define MaxSize 50 //定义栈中元素的最大个数
typedef struct{ElemType data[MaxSize]; //存放栈中元素int top; //栈顶指针
}SqStack;

2. 顺序栈的基本实现
2.1 初始化
void InitStack(SqStack &S){S.top=-1; //初始化栈顶指针
}
2.2 判断栈空
bool StackEmpty(SqStack S){if(S.top==-1) //栈空return true;else //不空return false;
}
2.3 数据进栈
bool Push(SqStack &S,ElemType x){if(S.top==MaxSize-1) //栈满,报错return false;S.data[++S.top]=x; //指针先加1,再入栈(注意顺序)return true;
}
2.4 数据出栈
bool Pop(SqStack &S,ElemType &x){if(S.top==-1) //栈空,报错return false;x=S.data[S.top--]; //先出栈,指针再减1(注意顺序)return true;
}
例:入栈序列为1,2,3,4,5,则出栈序列不可能为( )
A. 4 3 5 1 2 B. 5 4 3 2 1 C. 4 5 3 2 1 D. 1 2 3 4 5
本道题选A。这类题是栈最常考的题目,想要做好这种题一定要记住栈后进先出的特性。最简单的就是B,1 2 3 4 5一口气全都进栈,然后依次出栈,故B正确。对于C,1 2 3先入栈,4入栈后立刻出栈,然后5再入栈也立即出栈,最后1 2 3再出栈,就是4 5 3 2 1,故C正确。对于D很明显就是进一个元素,这个元素就立即出栈,故D正确。而A,1 2先进栈,3 4入栈后立即出栈才会是4 3开头,5入栈后立即出栈,所以前3位是4 3 5,但是1 2出栈只能是2 1,故A错误。:
3. 共享栈
利用栈底位置相对不变的特性,可让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸。

共享栈是为了更有效的利用存储空间,两个栈的空间相互调节,只有在整个存储空间被占满时才发生上溢,有利于减少上溢发生。
4. 栈的链式存储结构
采用链式存储的栈称为链栈,链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况。通常采用单链表实现,并规定所有操作都是在单链表的表头进行的。这里规定链栈没有头结点, Lhead指向栈顶元素。
typedef struct LinkNode{ElemType data;struct LinkNode *next;
}*LiStack;
第二部分大家主要掌握顺序栈栈空/满的条件,给出的例题非常重要。
三、栈的使用场景
栈能适用于递归算法,表达式求值以及括号匹配等问题中。
第三部分就一句话,三种场景大家记一下,后面两个最常出现!
相关文章:
数据结构速成--栈
由于是速成专题,因此内容不会十分全面,只会涵盖考试重点,各学校课程要求不同 ,大家可以按照考纲复习,不全面的内容,可以看一下小编主页数据结构初阶的内容,找到对应专题详细学习一下。 目录 一…...
算法练习第15天|226.翻转二叉树
226.翻转二叉树 力扣链接https://leetcode.cn/problems/invert-binary-tree/description/ 题目描述: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出&am…...
C#面向对象——封装、封装案例示例
C#面向对象——封装 什么是封装? (1)封装是将数据和操作数据的方法(行为)封装在一起。 (2)程序中封装的体现:属性,方法,类,接口,命名空间&#…...
【InternLM 实战营第二期-笔记3】茴香豆:搭建你的 RAG 智能助理
书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,很高兴能参与本次第二期训练营,我也将会通过笔记博客的方式记录学习的过程与遇到的问题,并为代码添加注释,希望可以帮助到你们。 记得点赞哟(๑ゝω╹๑) 茴香豆:搭建…...
Advanced RAG 03:运用 RAGAs 与 LlamaIndex 评估 RAG 应用
编者按:目前,检索增强生成(Retrieval Augmented Generation,RAG)技术已经广泛使用于各种大模型应用场景。然而,如何准确评估 RAG 系统的性能和效果,一直是业界和学界共同关注的重点问题。若无法…...
leetcode
找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串) 示例 1: 输入: s "…...
Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画
最近DOTS发布了正式的版本, 我们来分享现在流行基于群体战斗的弹幕类游戏,实现的核心原理。今天给大家介绍大规模战斗群体3D角色的动画如何来实现。 DOTS 对角色动画支持的局限性 截止到Unity DOTS发布的版本1.0.16,目前还是无法很好的支持3D角色动画。在DOTS 的ba…...
react异步组件如何定义使用 标准使用方法
目录 默认导出和命名导出的格式 默认导出的组件 使用方式 命名导出的组件 使用方式 默认导出和命名导出的格式 默认导出: // person.js const person {name: Alice,age: 30 };export default person;命名导出: // math.js export const add (a, b) > a b; exp…...
React + Ts + Vite + Antd 项目搭建
1、创建项目 npm create vite 项目名称 选择 react 选择 typescript 关闭严格模式 建议关闭严格模式,因为不能自动检测副作用,有意双重调用。将严格模式注释即可。 2、配置sass npm install sass 更换所有后缀css为sass vite.config.ts中注册全局样式 /…...
js爬虫puppeteer库 解决网页动态渲染无法爬取
我们爬取这个网址上面的股票实时部分宇通客车(600066)_股票价格_行情_走势图—东方财富网 我们用正常的方法爬取会发现爬取不下来,是因为这个网页这里是实时渲染的,我们直接通过网址接口访问这里还没有渲染出来 于是我们可以通过下面的代码来进行爬取: …...
代码随想录:二叉树5
目录 102.二叉树的层序遍历 题目 代码(队列实现) 107.二叉树的层序遍历II 题目 代码 199.二叉树的右视图 题目 代码 637.二叉树的层平均值 题目 代码 102.二叉树的层序遍历 题目 给你二叉树的根节点 root ,返回其节点值的 层序遍…...
Tomcat 获取客户端真实IP X-Forwarded-For
Tomcat 获取客户端真实IP X-Forwarded-For 代码实现: 在Host标签下面添加代码: <Valve className"org.apache.catalina.valves.RemoteIpValve" remoteIpHeader"x-forwarded-for" remoteIpProxiesHeader"x-forwarded-by&q…...
记录PS学习查漏补缺
PS学习 PS学习理论快捷键抠图PS专属多软件通用快捷键 PS学习 理论 JPEG (不带透明通道) PNG (带透明通道) 快捷键 抠图 抠图方式 魔棒工具 反选选中区域 CtrlShiftI(反选) 钢笔抠图注意事项 按着Ctrl单击节点 会出现当前节…...
Kafka 架构深入探索
目录 一、Kafka 工作流程及文件存储机制 二、数据可靠性保证 三 、数据一致性问题 3.1follower 故障 3.2leader 故障 四、ack 应答机制 五、部署FilebeatKafkaELK 5.1环境准备 5.2部署ELK 5.2.1部署 Elasticsearch 软件 5.2.1.1修改elasticsearch主配置文件 5.2…...
k-means聚类算法的MATLAB实现及可视化
K-means算法是一种无监督学习算法,主要用于数据聚类。其工作原理基于迭代优化,将数据点划分为K个集群,使得每个数据点都属于最近的集群,并且每个集群的中心(质心)是所有属于该集群的数据点的平均值。以下是…...
Excel文件转Asc文件
单个转换 import os import pandas as pdfilename (10)result01-1.xlsx df pd.read_excel(filename) # 读取Excel文件# 将数据保存为ASC格式 asc_filename os.path.splitext(filename)[0] .asc # 获取文件名并替换扩展名 with open(asc_filename, w) as file:# 写入文件…...
【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题7
【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题7 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书,赛题,解析等资料,知识点培训服务 添加博主wx:liuliu548…...
Webrtc 信令服务器实现
webrtc建联流程图 由上图可知,所谓的信令服务器其实就是将peer的offer/candidate/answer传给对端而已。这样的话实现方式就有很多种了,目前普遍的方式HTTP/HTTPS,WS/WSS。像webrtc-demo-peerconnection就是实现HTTP这种方式。本文使用WS&…...
【Blockchain】连接智能合约与现实世界的桥梁Chainlink
去中心化预言机试图实现依赖因果关系而不是个人关系的去信任和确定性结果。它以与区块链网络相同的方式实现这些结果,即在许多网络参与者之间分配信任。通过利用许多不同的数据源并实施不受单个实体控制的预言机系统,去中心化的预言机网络有可能为智能合…...
解决EasyPoi导入Excel获取不到第一列的问题
文章目录 1. 复现错误2. 分析错误2.1 导入的代码2.2 DictExcel实体类2.2 表头和标题3. 解决问题1. 复现错误 使用EasyPoi导入数据时,Excel表格如下图: 但在导入时,出现如下错误: name为英文名称,在第一列,Excel表格有值,但导入的代码中为null,就很奇怪? 2. 分析错误 …...
腾讯云主机部署Kali Linux:从零自制镜像到一键重装实战
1. 为什么要在腾讯云上部署Kali Linux? Kali Linux作为安全测试领域的瑞士军刀,集成了600渗透测试工具,从Wireshark到Metasploit应有尽有。但直接在物理机安装会面临驱动兼容性、系统稳定性等问题,而云主机部署既能保留完整功能&…...
04 - 运行 rocrtst 第一个测试
本文档帮助你成功运行 rocrtst 的第一个测试,并掌握各种运行方式。 1. 运行前检查清单 在运行测试之前,确认以下条件: # ✅ 1. rocrtst64 已构建并安装 ls $ROCM_PREFIX/bin/rocrtst64# ✅ 2. GPU kernel 已编译(检查你的 GPU …...
不想注册Nvidia账户?手把手教你修改app.js文件,让GeForce Experience直接进主界面
免登录畅享GeForce Experience:技术流修改指南 每次打开GeForce Experience都要面对那个恼人的登录窗口?作为资深PC玩家,我完全理解这种困扰。重装系统后最烦人的就是各种强制登录,尤其是当我们只想快速使用屏幕录制或游戏优化功能…...
《QGIS空间数据处理与高级制图》004:内置地理处理工具箱
作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...
FastbootEnhance:Windows平台终极Android刷机工具箱完整指南
FastbootEnhance:Windows平台终极Android刷机工具箱完整指南 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 在Android设备刷机和定制…...
深入解析:NRF24L01如何“伪装”成蓝牙设备?STM32实战代码拆解
深入解析:NRF24L01如何“伪装”成蓝牙设备?STM32实战代码拆解 在物联网设备爆炸式增长的今天,2.4GHz频段已成为无线通信的主战场。NRF24L01作为一款经典的射频芯片,以其低廉的价格和稳定的性能赢得了大量开发者的青睐。而蓝牙技术…...
DDrawCompat完整教程:Windows 11上经典游戏DirectDraw兼容性修复终极指南
DDrawCompat完整教程:Windows 11上经典游戏DirectDraw兼容性修复终极指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh…...
从玩具车到电动车:手把手拆解直流电机,搞懂它为啥能转还能发电
从玩具车到电动车:手把手拆解直流电机,搞懂它为啥能转还能发电 小时候拆过四驱车马达的人都知道,那个嗡嗡作响的小铜线圈藏着某种魔法——通上电池就能让轮子飞转,用手转动轴心居然还能点亮LED。这种神奇的装置就是直流电机&#…...
5G双连接(EN-DC):开启5G网络融合新体验
5G双连接(EN-DC):开启5G网络融合新体验 在5G网络快速发展的进程中,5G双连接(EN-DC)技术逐渐成为行业内关注的焦点。它作为5G网络架构中的一项关键技术,为提升网络性能、优化用户体验发挥着重要作…...
前端工程化:持续集成实战指南
前端工程化:持续集成实战指南 前言 持续集成(CI)是现代软件开发的核心实践之一。它能帮助团队快速发现问题、减少集成风险、提高开发效率。今天我就来给大家讲讲如何搭建一套完整的前端持续集成流程。 什么是持续集成 持续集成是一种软件开发…...
