数据结构与算法基础-学习-12-线性表之顺序队
一、个人理解
队列是线性表的衍生之一,具有先进先出的特性,在队尾进行插入操作,在队头进行删除操作。
队列的存储结构分为两个大类,一种是顺序队,就是用数组实现。另一种就是链队,使用链表实现。
顺序队存在真上溢和假上溢两种情况,真上溢指的是数据真的满了。假上溢举例的话就是队头索引由于出队(删除数据)而上移例如变为1,0号索引位会空出来,而队尾索引已到达数组最大长度,这时就会出现空间浪费的情况,所以引入了循环顺序队的概念。
二、顺序队图解

三、循环顺序队图解

当循环顺序队长度不满时,0、1、2号索引位没有数据(或者说有可以抹除的数据),不能浪费,如图队最大长度6,队尾索引是5,队头索引是3,(5+1)%6=0,又回到了0,可以继续插入数据,避免了空间的浪费。
四、结构体
1、ElemType
(1)说明
存放自定义数据。
(2)源码
typedef struct ElemType
{char StudentNum[StudentNumLen];char StudentName[StudentNameLen];int StudentScore;
}ElemType;2、SqQueue
(1)说明
Data:数据。
FrontIndex:队头索引。
RearIndex:队尾索引。
SqQueueLen:队的长度。
(2)源码
typedef struct SqQueue
{ElemType* Data;QueueLenType FrontIndex; //队头,出队时用。QueueLenType RearIndex; //队尾,入队时用。QueueLenType SqQueueLen;
}SqQueue;五、自定义数据类型
typedef int Status;typedef unsigned long long int QueueLenType;六、函数
1、InitSqQueue
(1)用途
初始化顺序队。
(2)源码
Status InitSqQueue(SqQueue* SQ)
{JudgeAllNullPointer(SQ);SQ->Data = (ElemType*)MyMalloc(sizeof(ElemType) * SQ_QUEUE_MAX_SIZE);SQ->FrontIndex = 0;SQ->RearIndex = 0;SQ->SqQueueLen = 0;Log("Init SqQueue : OK\n",Info);return SuccessFlag;
}(3)参数
参数名 | 说明 |
SQ | 需要初始化的SqQueue*类型顺序队。 |
2、GetSqQueueLen
(1)用途
获取顺序队长度。
(2)源码
QueueLenType GetSqQueueLen(SqQueue* SQ)
{JudgeAllNullPointer(SQ);return SQ->SqQueueLen;
}(3)参数
参数名 | 说明 |
SQ | SqQueue*类型顺序队。 |
3、EnterSqQueue
(1)用途
入队,将ElemType类型的数据插入到循环顺序队的队尾。
(2)源码
Status EnterSqQueue(SqQueue* SQ, ElemType E)
{JudgeAllNullPointer(SQ);if(GetSqQueueLen(SQ) == SQ_QUEUE_MAX_SIZE){Log("SqQueue is full, Data cannot be entered\n",Warning);return FailFlag;}SQ->SqQueueLen++;SQ->Data[SQ->RearIndex] = E;SQ->RearIndex = (SQ->RearIndex + 1) % SQ_QUEUE_MAX_SIZE;Log("Enter SqQueue : OK\n",Info);return SuccessFlag;
}(3)参数
参数名 | 说明 |
SQ | SqQueue*类型顺序队。 |
E | 需要插入ElemType类型的数据。 |
4、LeaveSqQueue
(1)用途
出队,将出队元素赋予ElemType* E,作为输出参数。
(2)源码
Status LeaveSqQueue(SqQueue* SQ, ElemType* E)
{JudgeAllNullPointer(SQ);JudgeAllNullPointer(E);if(GetSqQueueLen(SQ) == 0){Log("SqQueue is Empty, Data cannot be left\n",Warning);return FailFlag;}SQ->SqQueueLen--;*E = SQ->Data[SQ->FrontIndex];SQ->FrontIndex = (SQ->FrontIndex + 1) % SQ_QUEUE_MAX_SIZE;Log("Leave SqQueue : OK\n",Info);return SuccessFlag;
}(3)参数
参数名 | 说明 |
SQ | SqQueue*类型顺序队。 |
E | 输出参数,给一个ElemType* 类型指针即可。 |
5、GetSqQueueTop
(1)用途
获取顺序队队头数据,如果队是空队,返回ElemType的类型数据{"","",0}。
(2)源码
ElemType GetSqQueueTop(SqQueue* SQ)
{JudgeAllNullPointer(SQ);if(GetSqQueueLen(SQ) == 0){Log("SqQueue is Empty, can't get SqQueueTop\n",Warning);ElemType res = {"","",0};return res;}return SQ->Data[SQ->FrontIndex];
}(3)参数
参数名 | 说明 |
SQ | SqQueue*类型顺序队。 |
七、虚机测试
[gbase@czg2 LinearTable_SqQueue]$ make
gcc -Wall -g ../Log/Log.c SqQueue.c main.c -o TestSqQueue -I ../Log/[gbase@czg2 LinearTable_SqQueue]$ ./TestSqQueue
2023-2--Info--Init SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Warning--SqQueue is full, Data cannot be entered
2023-2--Warning--SqQueue is full, Data cannot be entered
2023-2--Debug--SqQueue Data :
StudentNum : X666
StudentName : Sun
StudentScore : 100
+++++++++++++++
StudentNum : X666
StudentName : Sun
StudentScore : 101
+++++++++++++++
StudentNum : X666
StudentName : Sun
StudentScore : 102
+++++++++++++++
StudentNum : X666
StudentName : Sun
StudentScore : 103
+++++++++++++++
StudentNum : X666
StudentName : Sun
StudentScore : 104
+++++++++++++++
StudentNum : X666
StudentName : Sun
StudentScore : 105
+++++++++++++++
FrontIndex : 0
RearIndex : 0
SqQueueLen : 6
2023-2--Info--Leave SqQueue : OK
2023-2--Debug--ElemType Data :
StudentNum : X666
StudentName : Sun
StudentScore : 100
2023-2--Info--Leave SqQueue : OK
2023-2--Debug--ElemType Data :
StudentNum : X666
StudentName : Sun
StudentScore : 101
2023-2--Info--Leave SqQueue : OK
2023-2--Debug--ElemType Data :
StudentNum : X666
StudentName : Sun
StudentScore : 102
2023-2--Info--Leave SqQueue : OK
2023-2--Debug--ElemType Data :
StudentNum : X666
StudentName : Sun
StudentScore : 103
2023-2--Debug--SqQueue Data :
StudentNum : X666
StudentName : Sun
StudentScore : 104
+++++++++++++++
StudentNum : X666
StudentName : Sun
StudentScore : 105
+++++++++++++++
FrontIndex : 4
RearIndex : 0
SqQueueLen : 2
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Info--Enter SqQueue : OK
2023-2--Debug--SqQueue Data :
StudentNum : X666
StudentName : Sun
StudentScore : 104
+++++++++++++++
StudentNum : X666
StudentName : Sun
StudentScore : 105
+++++++++++++++
StudentNum : X666
StudentName : Sun
StudentScore : 100
+++++++++++++++
StudentNum : X666
StudentName : Sun
StudentScore : 101
+++++++++++++++
StudentNum : X666
StudentName : Sun
StudentScore : 102
+++++++++++++++
StudentNum : X666
StudentName : Sun
StudentScore : 103
+++++++++++++++
FrontIndex : 4
RearIndex : 4
SqQueueLen : 6
2023-2--Debug--ElemType Data :
StudentNum : X666
StudentName : Sun
StudentScore : 104
相关文章:
数据结构与算法基础-学习-12-线性表之顺序队
一、个人理解队列是线性表的衍生之一,具有先进先出的特性,在队尾进行插入操作,在队头进行删除操作。队列的存储结构分为两个大类,一种是顺序队,就是用数组实现。另一种就是链队,使用链表实现。顺序队存在真…...
Python 字典(Dictionary)小窍门
字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:d {key1 : value1, key2 : value2 }注意:dict …...
知识图谱构建技术综述
摘要 *知识图谱为实现语义化智能搜索以及知识互联打下了基础,。, *随着知识的发展,传统的基于模板和规则构建的知识图谱已经被深度学习所替代。 知识组织得原则中:知识的充分性、有序性和标准化规则。深度学习的效果在很大程度上…...
环境变量和进程地址空间
目录 环境变量: env:显示所有的环境变量: echo $环境变量名表示查看环境变量的值 理解环境变量: getenv:显示环境变量的值 export set命令:显示所有变量 unset取消变量: pwd:当…...
【数据结构】栈和队列
目录 一、栈 1、栈的定义 2、栈的模拟实现(顺序栈) 1、创建一个顺序结构的栈 2、实现压栈方法(push) 3、模拟实现pop方法(出栈) 4、模拟实现peek(查看) 5、测试上述方法 3、栈的应用场景 1、改变元…...
sql复习(视图、Top-N分析、其他数据库对象)
一、视图view 1.视图定义 视图是一种虚表。 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。 向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句。 视图向用户提供基表数据的另一种表现形式。 2.使用视图的好处 控制数据访问 简…...
2023年私募股权基金研究报告
第一章 概况 PE是私募,也即私募投资基金,是指以非公开发行方式向合格投资者募集的,投资于股票、股权、债券、期货、期权、基金份额及投资合同约定的其他投资标的(如艺术品、红酒等)的投资基金,简称私募基金…...
Redis单点故障+红锁原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、Redis单点故障二、红锁原理三、Redission实现了红锁一、Redis单点故障 单台redis容易出单点故障采用集群,获取到锁之后数据持久化到rdb,aof文件中从节点有可能在从主节点拿到数据之前,主节点…...
数据库中的存储过程
1、创建存储过程create procedure sp_name[参数名] [类型],[参数名] [类型]asbegin.........end以上格式还可以简写成:create proc sp_name[参数名] [类型],[参数名] [类型]asbegin.........end/*注:“sp_name”为需要创建的存储过程的名字,该…...
基于 VPX 总线的工件台运动控制系统研究与开发-DSP+FPGA硬件架构(一)
作为光刻机核心单元之一,超精密工件台主要负责实现快速扫描、上下片、精密定位、调平调焦等功能。目前,较为成熟的方案大多采用 VME 并行总线架构来建立超精密工件台控制系统,由于随着系统性能要求的提升,VME 总线以及相应的处理器…...
Android 9.0 根据包名授予app所需的权限
1.概述 在9.0的系统rom产品定制化开发中,在对系统app首次启动默认是会弹出授权的弹窗的,但是对于产品来说会显示的有些麻烦,对产品体验度也不是很好,所以在进行产品开发的时候,默认要求对一些app根据包名授予权限,这样就不会弹出授权的窗口了默认就有权限了,接下来就来实…...
如何将Python包发布到PyPI上,使用pip安装自己的库
如何发布自己的第三方库1. PyPi的用途2.Python包发布步骤2.1 创建目录结构2.2 准备文件1、README.rst2、LICENSE.txt,创建许可证3、setup.py文件4.克隆setup.py仓库(推荐)2.3 编写核心代码2.4 生成分发档案2.5 发布包到PyPi3.验证发布PYPI成功…...
【Git】git常用命令总结
简言 git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 里面有很多常用的命令语法,在此做一个常用命令总结记录,以备不时之需。 命令总结 由于git是基于linux开发的工具,所以有个特点&a…...
Cortex-M0中断控制和系统控制
目录1.NVIC和系统控制块特性2.中断使能和清除使能3.中断挂起和清除挂起4.中断优先级5.中断控制的通用汇编代码使能和禁止中断设置和清除中断挂起状态设置中断优先级6.异常屏蔽寄存器(PRIMASK)7.中断输入和挂起行为8.中断等待9.系统异常的控制寄存器10.系…...
科技云报道:2023,云计算的风向变了
科技云报道原创。 2022,是云计算的“分水岭”之年。 与前两年的火热相比,2022年云计算行业实属不太好过:阿里云一季度营收增速创出历史新低,腾讯云的市场份额也被后来者华为云反超,沦为第三。 在此情形下,…...
工程管理系统源码-专注项目数字化管理-工程管理
工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...
Nacos详细使用操作文档(图文详细)
文章目录Nacos详细使用操作文档(图文详细)1、安装2、Nacos作为注册中心2.1、Nacos服务注册【ICRMS】2.2、Nacos 服务调用2.2.1、Feign 远程调用【Personnel】2.2.2)、RestTemplateRibbon 远程调用【Personnel】3、Nacos作为配置中心4、Nacos 命令空间5、Nacos配置文件参数详解N…...
如何评价2023年美赛ABC题目
A题 遭受干旱侵袭的植物群落 背景 不同种类的植物对压力的反应方式不同。例如,草原对干旱非常敏感。干旱发生的频率和严重 程度各不相同。大量的观察表明,不同物种的数量在植物群落如何适应连续几代的干旱周期中 起着重要作用。在一些只有一种植物的…...
Win10显示dds及tga缩略图
整理之前做游戏MOD时收集的模型资源,3D游戏模型的贴图文件格式基本都是dds或tga的,毕竟无损压缩、支持嵌入MipMap、带透明通道、可以被GPU硬解balabala...道理我都懂但这俩玩意系统根本直接查看不了,就算装上专门的看图软件或插件,文件夹视图下也没有缩略图预览,只能一个个点开…...
Lesson5.1---Python 之 NumPy 简介和创建数组
一、NumPy 简介 NumPy(Numerical Python)是 Python 的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比 Python 自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
