数据结构(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,一经查实,立即删除!

相关文章

JavaScript 闭包 css html

闭包 什么是闭包 JavaScript的作用域包括全局作用域和函数作用域和块级作用域。 在JavaScript作用域环境中访问变量的权利是由内向外的&#xff0c;内部作用域可以获得当前作用域下的变量&#xff0c;并且可以获得包含当前作用域的外层作用域下的变量&#xff0c;反之则不能…

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

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;行心科技董事长林泳强、顾问王志文老师与研草堂的厂商齐聚…

@EnableResourceServer资源服务注解源码分析

文章目录 学习参考EnableResourceServer概要ResourceServerConfiguration属性定义configure(HttpSecurity)ResourceServerSecurityConfigurerinit(HttpSecurit)configure(HttpSecurity) 学习参考 Spring Security框架配置运行流程完整分析 - 【必看】 Security OAuth2 授权 &…

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 系统…

Python数据框操作 -- DataFrame列名和索引设置

先创建一个数据框&#xff1a; import pandas as pd df pd.DataFrame({a:[1,1,2,3,4], b:[5,6,7,8,8]}) 重新设置数据框的列名&#xff0c;使数据框的列名为“A”和“B”&#xff1a; df.columns [A,B] 设置A列为数据框的索引&#xff1a; df1 df.set_index(A, drop …

怎么用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…

永久域名存在吗?

在互联网的世界里&#xff0c;域名是企业与个人在线身份的重要标识&#xff0c;它不仅关系到品牌形象&#xff0c;还可能影响搜索引擎优化(SEO)和用户体验。因此&#xff0c;拥有一个“永久”域名&#xff0c;即一个长期稳定、不受时间限制的域名&#xff0c;是许多网站所有者的…

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 (…

SD6410高效同步降压DC-DC稳压器集成电路可输出1.5输入电压

SD6410是高效、高频同步降压DC-DC稳压 器集成电路&#xff0c;可输出高达1.5A的输出电流。 SD6410可在2.3V至5.5V的宽输入电压范围 内工作&#xff0c;并集成了具有极低RDS(ON)的 主开关和同步开关&#xff0c;以最大限度地减少导通 损耗 它是为单节锂离子(Li)电池供电的便携式…

ffmpeg视频编码原理和实战-(5)对编码过程进行封装并解决丢帧问题

头文件&#xff1a; xencode.h #pragma once #include <mutex> #include<vector> struct AVCodecContext; struct AVPacket; struct AVFrame; class XEncode { public:///// 创建编码上下文/// para codec_id 编码器ID号&#xff0c;对应ffmpeg/// return 编码上…

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

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

vllm lora、gptq、awq推理使用

1)lora推理 docker run --gpus all -v /ai/Qwen1.5-7B-Chat:/qwen-7b -v /ai/lora:/lora -p 10860:10860 --ipc

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

目录 一、前言 二、题目描述 三、解题方法 ⭐ 头插法 --- 创建新的链表 ⭐ 迭代法 --- 三指针 ⭐ 递归法 四、总结与提炼 五、共勉 一、前言 反转链表这道题&#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;想…