数据结构(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 然后按照依次扫描的方法得到矩阵上的值,但是失去了随机存储的功能,因此有下面的十字链表法

总结:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【经典算法】最短路径算法——Dijkstra

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;算法启示录 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 松弛视角 伪代码展示 三角形理…

GlaDS缘起

题目:Modeling channelized and distributed subglacial drainage in two dimensions 近年来,冰盖表面融化与冰盖动态之间的联系及其对海平面上升的影响引起了广泛关注。特别是格陵兰冰盖的研究显示,表面融水显著影响冰川移动速度,而冰下排水系统对冰川动力学及冰川水文学…

锂电池寿命预测 | Matlab基于SSA-SVR麻雀优化支持向量回归的锂离子电池剩余寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 【锂电池剩余寿命RUL预测案例】 锂电池寿命预测 | Matlab基于SSA-SVR麻雀优化支持向量回归的锂离子电池剩余寿命预测&#xff08;完整源码和数据&#xff09; 1、提取NASA数据集的电池容量&#xff0c;以历史容量作…

《尚庭公寓》项目部署之Docker + Nginx

docker rmi nginx docker pull nginx docker rm -f nginx #先创建一个简易的nginx容器&#xff08;后面会删&#xff09;&#xff0c;然后通过 docker cp命令把容器里面的nginx配置反向拷贝到宿主主机上。 docker run --name nginx -p 80:80 -d nginx# 将容器nginx.conf文件复…

[ubuntu]docker 卡登录 You‘ve been signed out

Setting->Resources->Proxies设置当前使用的proxies即可 参考&#xff1a;https://github.com/docker/for-mac/issues/7160#issuecomment-2061040813

C++ 利用模板对不同类型的数组元素排序

一、问题描述&#xff1a; 使用template函数模板对一个长度为5的int数组和char数组元素进行排序&#xff08;升序&#xff09;。 二、代码&#xff1a; #include <iostream>using namespace std;template<typename T> void swapWWW(T &a, T &b) {T c a;…

乡村振兴与脱贫攻坚相结合:巩固拓展脱贫攻坚成果,推动乡村全面振兴,建设更加美好的乡村生活

目录 一、引言 二、巩固拓展脱贫攻坚成果 1、精准施策&#xff0c;确保稳定脱贫 2、强化政策支持&#xff0c;巩固脱贫成果 3、激发内生动力&#xff0c;促进持续发展 三、推动乡村全面振兴 1、加快产业发展&#xff0c;增强乡村经济实力 2、推进乡村治理体系和治理能力…

uniapp中父子组件的传值

1. uniapp中父子组件的传值 1.1. 父子组件的传值 通过props来实现, 子组件通过props来接收父组件传过来的值 1.1.1. 父组件 <!-- 父组件 --> <template><view><my-son :title"title" sendData"getSonData"></my-son><…

巧用docker+jmeter快速实现分布式百万级并发

分享背景 碰到的问题&#xff1a; 一个JMeter实例可能无法产生足够的负载来对你的应用程序进行压力测试&#xff5e; 解决办法&#xff1a; 1、修改jmeter配置文件里的内存堆 2、引入jmeter分布式压测 带来的问题&#xff1a; 如果我们要做分布式负载测试–我们需要1个…

win10下,python3.7安装xlrd和xlwt

win10下&#xff0c;执行import xlwt&#xff0c;结果报错 No module named xlwt。 原因&#xff1a;使用的python没有安装xlwt包。 解决方法&#xff1a; 1&#xff09;打开一个命令窗口&#xff0c;执行&#xff1a;where python&#xff0c;可以看到使用的python路径及版…

5.31.8 学习深度特征以实现判别定位

1. 介绍 尽管没有对物体的位置提供监督,但卷积神经网络 (CNN) 各层的卷积单元实际上可以充当物体检测器。尽管卷积层具有这种出色的物体定位能力,但当使用全连接层进行分类时,这种能力就会丧失。最近,一些流行的全卷积神经网络,如 Network in Network (NIN) [13] 和 Goog…

翘首以盼的抗锯齿

Antialiasing 实际的图形学中是怎么实现反走样的呢&#xff1f; 我们不希望实际产出的图形有锯齿效果&#xff0c;那怎么办呢&#xff1f; 从采样的理论开始谈起吧 Simpling theory 照片也是一种采样&#xff0c;把景象打散成像素放到屏幕上的过程&#xff1a; 还可以在不…

stm32 定时器输出比较(OC)与PWM的理解和应用

不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无以成江海。大家好&#xff0c;我是闲鹤&#xff0c;公众号 xxh_zone&#xff0c;十多年开发、架构经验&#xff0c;先后在华为、迅雷服役过&#xff0c;也在高校从事教学3年&#xff1b;目前已创业了7年多&am…

盛夏之约,即将启程,2024中国北京消防展将于6月26举行

盛夏之约&#xff0c;即将启程&#xff0c;2024中国北京消防展将于6月26举行 盛夏之约&#xff0c;即将启程&#xff01;备受瞩目的2024中国&#xff08;北京&#xff09;消防技术与设备展览会将于6月26-28 日在北京.首钢会展中心盛大召开。作为消防安全和应急救援的年度盛会&…

DDMA信号处理以及数据处理的流程---DDMA原理介绍

Hello&#xff0c;大家好&#xff0c;我是Xiaojie&#xff0c;好久不见&#xff0c;欢迎大家能够和Xiaojie一起学习毫米波雷达知识&#xff0c;Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程&#xff0c;本系列文章将从目标生成、信号仿真、测距、测速、cfar…

LeetCode790多米诺和托米诺平铺

题目描述 有两种形状的瓷砖&#xff1a;一种是 2 x 1 的多米诺形&#xff0c;另一种是形如 “L” 的托米诺形。两种形状都可以旋转。给定整数 n &#xff0c;返回可以平铺 2 x n 的面板的方法的数量。返回对 109 7 取模 的值。平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺…

【教程】从0开始搭建大语言模型:文本预处理

从0开始搭建大语言模型&#xff1a;文本预处理 参考仓库&#xff1a;LLMs-from-scratch 理解Word embedding 深度神经网络模型&#xff0c;包括LLM&#xff0c;不能直接处理原始文本&#xff0c;因此需要一种方法将它转换为连续值的向量&#xff0c;也就是embedding。如下图…

【YOLOV8】1.开发环境搭建

Yolo8出来一段时间了,包含了目标检测、实例分割、人体姿态预测、旋转目标检测、图像分类等功能,所以想花点时间总结记录一下这几个功能的使用方法和自定义数据集需要注意的一些问题,本篇是第一篇,开发环境的配置。 YOLO(You Only Look Once)是一种流行的物体检测和图像分割…

UE4_Ben_图形52_水下效果处理

学习笔记&#xff0c;不喜勿喷&#xff0c;欢迎指正&#xff0c;侵权立删&#xff01;祝愿生活越来越好&#xff01; 在这个后期处理的效果中&#xff0c;我们可以看到有很多不同的&#xff0c;这里有浓雾&#xff0c;波纹扭曲&#xff0c;镜头扭曲和边缘模糊&#xff0c;在第4…

Linux中安装Docker,并使用Docker安装MySQL和Redis

1、安装docker 1卸载系统之前的docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2、安装Docker-CE #安装必须的依赖 sudo yum install -y yum-utils \device-map…