数据结构(3)栈、队列、数组

1 栈

1.1 栈的定义

后进先出【LIFO】

1.2 基本操作

元素进栈出栈 只能在栈顶进行!!!

经常考的题:

穿插的进行进栈和出栈 可能有多个选项

1.3 顺序栈

1.3.1 初始化

下标是从0开始的

1.3.2 进栈

更简单的写法:

1.3.3 出栈

1.3.4 读栈顶元素

有时候栈顶的top指针是指向下一个个的

1.4 共享栈

回收资源这个事情我不用管,系统会自己回收!

1.5 链栈

只能在链头进行操作【带不带头结点 都要会写!!!】

一定要自己写一遍!!!

2 队列

2.1 定义

排队在食堂打饭

先进入的元素先出【FIFO】

2.2 基本操作

2.3 顺序队列

2.3.1 初始化

2.3.2 入队

这里要注意队列满的时候的条件,当rear等于10的时候不能说明已经满了:因为前面的元素可能已经出队了那么我们应该把rear指针指向前面【这时候就用到取模运算!!!】

加入取模运算之后,队列逻辑上就变成了一个循环队列的感觉:

2.4 循环队列

队列已满的条件:必须要牺牲一个存储单元,不能把那个也填上。因为在初始化的时候,front=rear时,判断队列是空的;因此为了加以区分,只能这样了!

2.4.1 入队

这样就可以填上了队列是否已满

2.4.2 出队

2.4.3 判满和判空

【1】牺牲一个存储单元用于判满

有了前后指针可以计算出队列中的元素个数!!!:

就是:(rear+Maxsize-front)%Maxsize[记住!!]

【2】定义size 用于记录对列中有几个元素

【3】设置tag 0表示删除 1表示插入

只有删除会导致队列为空 只有插入会导致队列为满!!!

因此可通过front=rear和tag的值进行综合判断 对列是满还是空!

2.4.4 其他的题

【1】队尾指针指向队尾元素

这样的话可以在初始化的时候有所改动!!!

判空:

判满:

牺牲一个存储单元、增加一个辅助变量!

2.5 队列的链式实现

带头结点和不带头节点

2.5.1 初始化

2.5.2 入队【在表尾进行】

不带头结点的时候要对第一个元素进行特殊处理:

2.5.3 出队

对最后一个节点出队的时候,要修改的不止头指针还有尾指针哦

当最后一个结点出队的时候操作不太一样!

2.5.4 队列满的条件

一般不会满,但是在顺序存储的时候却很重要

2.5.5 总结

如果总是需要使用length的话,就把length放在一开始初始化的时候!

2.6 双端队列

双端队列:只允许从两端插入和删除,和传统的队列不太一样!

由此可以得到两个变种:输入受限和输出受限队列

【1】考点 :判断输出序列的合法性!!!

(1)栈【卡特兰数】

(2)输入受限的双端序列

在栈里合法的,在这里也一定合法!

(3)输出受限的双端序列

【2】总结

3 栈和队列的应用

3.1 栈在括号匹配中的应用

IDE可视化编译器,括号必须是成双成对的

注意:最后出现的左括号最先被匹配【LIFO】,每出现一个右括号就要消耗一个左括号【出栈】!

就是说可以把从左到右进行扫描,遇到左括号就压入栈中 遇到右括号就出栈最后一个入栈的元素和其匹配,匹配成功就继续扫描,直到扫描结束时栈为空 说明括号匹配成功!

尝试不使用基本操作,只是使用指针判断是否匹配!

3.2 栈在表达式求值中的应用

后缀表达式在应用中会更加的广泛,也叫做逆波兰表达式1

注意表达式转换时有严格的左右关系!!!!不能乱哦!!!

3.2.1 中缀表达式转后缀表达式

【1】手算

可以看出中缀表达式中运算的顺序就是后缀表达式中 运算符出现的顺序,但是一个中缀表达式可能有多个后缀表达式,这样不妨方便机算,因此要有一个“左优先原则”如下:

左优先:只要左边的可以先计算,就有限算左边的!!!

【2】机算

这素考试的重点!!!!

3.2.2 后缀表达式的运算

3.2.3 后缀表达式运算【栈】

特点最后出现的操作数最先被运算:意思就是当扫描到运算符的时候 与运算符挨的最近的两个元素先运算!这样就满足栈的定义【LIFO】【后进先出】

具体的操作过程:

!!!中缀转后缀和后缀的运算两个算法结合

都是从左往右进行的!所以就有了下面的:

用笔写一下!!!!!!

3.2.4 中缀转前缀

右优先:会让一样!很爽的结果!

3.2.5 前缀表达式代码实现【栈】

从右向左扫描! 实现的时候注意先出来的是左操作数!!!

3.2.6 总结

算法必须有确定性!

所以给前缀表达式和后缀表达式加了很多限制!

3.3 栈在递归中的应用

3.3.1 函数调用的过程

所以在func1中修改ab的值main函数中的ab值不会改变,因为改的就不是一个东西!

3.3.2 栈在递归中的应用

递归层数越多 身高约高!

红色箭头是调用的顺序,根据图可以看出有些值会被计算两次,这就是递归算法不太高效的原因之一

3.4 队列的应用

树的层次遍历:树结构的结点一层一层的遍历

【过程:加入一个结点,然后把他的左右子结点加在队尾,当一个结点的左右结点都在的话他就可以出队】

图的广度优先遍历:

思想和树差不多

队列在操作系统中的应用:

4 数组和特殊矩阵

4.1 数组

一维数组:

元素种类相同那么存储的大小也是相同的!

二维数组:

行有限和列优先可以把本来不是线性的结构拉成线性的!计算机存储的空间都是线性的:当给出行号和列好计算机就可以计算出这个元素在计算机中的存储地址,也就是说二维数组也具有随机存储的特性!

4.2 矩阵的存储

4.2.1 普通矩阵

4.2.2 对称矩阵

最喜欢考查的点:在已知行号和列号时怎么创造映射函数得到数组的下标

比如:行优先时:

当i>j时:

当i<j时:

4.2.3 三角矩阵

重点存储不是常量的区域:和对称是一样的

4.2.4 三对角矩阵(带状矩阵)

一共有3n-2个元素!

4.2.4 稀疏矩阵

创建struct 然后按照依次扫描的方法得到矩阵上的值,但是失去了随机存储的功能,因此有下面的十字链表法

总结:

坑可能在下标是不是从零开始的!

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

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

相关文章

纯血鸿蒙开发实战—如何开发出一个鸿蒙购物应用!

HarmonyOS 支持应用以 Ability 为单位进行部署&#xff0c;Ability 可以分为 FA&#xff08;Feature Ability&#xff09;和 PA&#xff08;Particle Ability&#xff09;两种类型。 本篇 Codelab 将会使用 UI 组件开发出一个 HarmonyOS 购物应用。 HarmonyOS 为开发者提供了…

TikTok广告投放攻略——广告类型详解

TikTok广告是品牌或创作者付费向特定目标受众展示的推广内容&#xff08;通常是全屏视频&#xff09;。TikTok 上的广告是一种社交媒体营销形式&#xff0c;通常旨在提高广告商的知名度或销售特定产品或服务。 就 TikTok广告投放而言&#xff0c;其组织层级分为三个层级&#x…

行心科技与研草堂携手,共绘医康养新生态的食疗养生蓝图

在健康产业蓬勃发展的当下&#xff0c;广州市行心信息科技有限公司&#xff08;以下简称“行心科技”&#xff09;与研草堂携手合作&#xff0c;共同亮相于2024年第34届健博会暨中国大健康产业文化节。现场&#xff0c;行心科技董事长林泳强、顾问王志文老师与研草堂的厂商齐聚…

vue3之拆若依--记实现后台管理首页(左侧菜单栏、头部信息区域...)

效果图 前期准备 启动若依在本地 启动若依后台,跑在自己本地: 这里对于如何下载若依相关的前后端代码请参考若依官网:RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-…

【Java毕业设计】基于JavaWeb的在线购物网站的设计与实现

文章目录 摘 要ABSTRACT目 录1 概述1.1 研究背景及意义1.2 国内外研究现状1.3 拟研究内容1.4 系统开发技术1.4.1 vue技术1.4.2 B/S结构1.4.3 Spring Boot框架1.4.4 MySQL数据库1.4.5 MVC模式 2 系统需求分析2.1 可行性分析2.2 功能需求分析 3 系统设计3.1 功能结构设计3.2 系统…

怎么用PHP语言实现远程控制两路照明开关

怎么用PHP语言实现远程控制两路开关呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制两路开关&#xff0c;两路开关可控制两路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi墙…

git clone 文件名中文、有冒号等问题 fatal: repository ‘***/r/鏍″洯鏅烘収椋熷爞/.git/‘ not found

记录一个git问题&#xff0c;比较有意思&#xff0c;也比较难找。 背景 首先把代码拉下来&#xff0c;发现给我报错。 怀疑 刚开始以为是仓库地址变了&#xff0c;但是发现仓库地址并没有变过。 交流 然后寻找解决方案。因为同事也遇到过&#xff0c;同事交了我一招&…

【西瓜书】2.模型评估与选择

1.经验误差与过拟合 &#xff08;1&#xff09;错误率、精度 &#xff08;2&#xff09;误差&#xff1a;训练误差/经验误差、泛化误差 &#xff08;3&#xff09;过拟合、欠拟合 欠拟合好克服&#xff0c;过拟合无法彻底避免 2.三大任务——评估方法 泛化误差的评估方法&a…

STM32F103VE和STM32F407VE的引脚布局

STM32F103VE vs STM32F407VE 引脚对比表 引脚 STM32F103VE STM32F407VE 备注 1 VSS VSS 地 2 VDD VDD 电源 3 VSSA VSSA 模拟地 4 VDDA VDDA 模拟电源 5 OSC_IN OSC_IN 外部时钟输入 6 OSC_OUT OSC_OUT 外部时钟输出 7 NRST NRST 复位 8 PC13 (GPIO) PC13 (GPIO) GPIO 9 PC14 (…

如何永久擦除Android手机中的所有个人数据?

在这个数字化的时代&#xff0c;确保您的个人数据的安全和隐私至关重要。如果您计划出售或回收您的Android手机&#xff0c;了解如何正确擦除Android手机是至关重要的。本综合指南将引导您通过安全擦除Android手机的分步过程&#xff0c;以保护您的敏感信息。 手机是极其敏感的…

反转链表的三种方法--面试必考(图例超详细解析,小白一看就会!!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐ 头插法 --- 创建新的链表 ⭐ 迭代法 --- 三指针 ⭐ 递归法 四、总结与提炼 五、共勉 一、前言 反转链表这道题&#xff0c;可以说是--链表专题--&#xff0c;最经典的一道题&#xff0c;也是在面试中频率最高的一道题目&…

编译 TMS320F2838x 项目

编译 tms320f28388 项目&#xff0c;并生成 hex 文件 介绍 C2000Ware 目录 archive 架构 boards 基于官方开发板的例子 device_support 官方驱动&#xff0c;建立工程重点要用到的东西&#xff08;基于寄存器变量访问&#xff09; docs 说明文档 driverlib 官方的驱动…

找好看的简历模板,就上这6个网站。

找好看的简历模板就上这6个网站&#xff0c;免费下载&#xff01; 1、菜鸟图库 个人简历模板|WORD文档模板免费下载 - 菜鸟图库 站内有超多办公类素材&#xff0c;PPT、world、excel模板都能找到&#xff0c;简历模板有非常详细的分类&#xff0c;风格类型也很多&#xff0c;想…

数据库MongoDB详解

文章目录 入门指南1. 安装 MongoDB2. 启动 MongoDB 服务3. 连接到 MongoDB4. 创建数据库和集合5. CRUD 操作6. 索引7. 备份与恢复 不同场景下的应用方式&#xff1a;应用案例展示 入门指南 MongoDB 是一个基于分布式文件存储的非关系型数据库&#xff08;NoSQL&#xff09;&am…

Linux “ 软件管理 “

软件管理 widows 安装 方法一&#xff1a; 双击exe安装包&#xff0c;就可以安装。 用exe安装的软件会破记录到注册表中。 注册会记录安装位置&#xff0c;软件名称。 方法二&#xff1a; 用绿色方式进行安装。 不用写到注册表中&#xff0c;因此无法在开始菜单里面查看和卸…

AppInventor2有没有删除后的撤销功能?

问&#xff1a;不小心删除了组件&#xff0c;能撤回吗&#xff1f; 答&#xff1a;界面&#xff08;组件&#xff09;设计界面&#xff0c;没有撤销功能。代码&#xff08;逻辑&#xff09;设计视图&#xff0c;可以使用 CtrlZ 撤销&#xff0c;CtrlY 反撤销。 界面设计没有撤…

AIGC绘画设计——midjourney有哪些好用的关键词?

midjourney有哪些高级关键词&#xff1f; 这一期继续分享一些高级的关键词&#xff0c; 我有一些案例也是从其他博主那学习来的&#xff0c; 但为了尽可能不出错&#xff0c;每个案例都是自己尝试了很多次后才拿出来的。 挑选了几个效果比较好&#xff0c;使用场景较高的类型…

Odoo:全球用户规模最大的免费开源ERP,使用前必须关注的事项

在数字经济时代&#xff0c;使用企业资源规划 (ERP) 工具管理业务是优化绩效和获得最佳结果的必要条件。 Odoo作为世界上最受欢迎的免费开源企业管理软件&#xff0c;已成功服务全球超过1200万以上的企业用户规模&#xff0c;开源智造作为Odoo亚太地区的金牌服务机构&#xff…

【Mybatis】INSERT INTO 遇到NULL怎么处理?

目录标题 背景-使用Mybatis手写批量插入Insert方法测试核心代码&#xff0c;author字段为null&#xff0c;插入条件怎么写&#xff1f; MybatisPlus解决方案自动填充字段 Mybatis解决方案if标签处理 问题&#xff1a;如果不在工程里面设置默认值&#xff1f;如何直接使用数据库…

26-unittest之装饰器(@classmethod)

unittest中的setUp可以在每个测试方法运行前执行&#xff0c;有效的减少了代码量。但有个弊端&#xff0c;比如打开浏览器操作&#xff0c;执行每个测试方法前都要重新打开一次&#xff0c;这样就会浪费很多时间。 是否可以只打开一次浏览器&#xff0c;执行完所有的测试方法后…