基于顺序表实现队列循环队列的处理
文章目录
- 1.假溢出的现象
- 2.循环队列
- 3.顺序表实现队列架构
- 4.顺序表模拟实现队列
- 5.设计循环队列(校招难度)
1.假溢出的现象
下面的这个就是我们的假溢出的这个现象的基本的来源:
我们的这个队列里面是有9个位置的,我们知道这个队列里面应该是从后面进队列,从前面出队列,因此这个划去的这个1,2,3就是出队列的,因此我们的这个里面的这个head指针,也就是我们说的这个头指针,就是指向的我们的这个队列里面当前的第一个有效的元素;
但是随着我们的这个数据不断地进入我们的这个队列,这个时候,我们的这个队列里面的尾指针,也就是这个图上面的这个tail指针很快就指向了我们的这个队列的最后一个元素的下一个位置,因此这个时候我们想要插入这个10这个元素的时候,就不可以了;
但是我们发现这个队列里面是有9个位置的,但是这个里面的这个时候的有效的这个数据的个数就是6个,显然在我们的这个队列的前面是有这个空位置的,但是我们的这个10就是无法插入,在当前的这个数据结构下面;
就比如你去吃饭,餐馆里面是9个桌子,一共只有6个是有人的,但是你进去的时候,小二告诉你这个餐馆满了,你作何感想?这个现象就是我们的假溢出现象;

假溢出说的其实就是我们的这个这个tail指向的这个位置是我们的队列外面的这个位置,好像表示这个队列是溢出的,但是这个队列前面还是有数据空位置的,我们把这个情况称之为“假溢出”—好像是溢出的,但是实际上不是满的,这个其实名字和这个情况是高度匹配的,很容易理解;
2.循环队列
循环队列的引入就是为了解决上面出现的这个假溢出的情况:
就是当我们的这个tail指向的这个位置超过我们的这个队列里面的这个最后一个元素的这个范围之后,我们就让他指向我们的队列的开始位置,因为这个时候我们的开始的位置是有空位置的,这样就可以有效的解决这个假溢出的现象;
但是随着这个循环队列的这个引入,我们需要多引入一个变量,就是count,这个表示的就是我们的这个队列里面的这个有效元素的个数,当我们的这个count<size也就是小于我们的队列的大小的时候,我们就可以认为这个队列是假溢出的,我们可以让这个tail指向我们的第一个元素即可;

下面的这个就是我们的循环队列进行这个数据的插入的时候,相关的参数的变化:tail指向这个1下标的位置,我们的这个count也是需要加上1的,因为这个时候我们的有效数据加上一个;

3.顺序表实现队列架构
基本的一些这个方法:例如下面的这个里面出现的这个数据的插入push,和我们的这个队列里面的元素的初始化,front表示的就是获取我们的这个队列的首部的元素,pop就是弹出元素,clear相当于就是销毁这个队列,empty就是判断这个队列是不是空的,里面是不是存在元素,下面的这个就是我们会实现的这些方法;

4.顺序表模拟实现队列
因为我们的这个队列是基于这个顺序标的,所以这个队列实现的过程中会使用到这个顺序表里面的这个相关的方法,需要我们进行人为的这个补充;
下面的这个代码里面使用的是queue表示的是和我们的这个队列的相关的方法,这个vector就是顺序表里面的相关的方法的这个调用;
1)判断是不是空的,直接查看这个count也就是这个数据域里面的这个有效的数据个数是不是为0即可;
2)push就是直接进行这个数据的插入即可,首先需要看看是不是可以进行插入,如果我们的这个队列本来就是满的,这个时候肯定是无法进行这个插入的操作的;
然后就是如果可以进行这个插入的操作,我们就是调用的这个顺序表里面的这个数据的插入的方法,插入之后就让我们的这个末尾的指针后移一位即可,如果出现这个假溢出的情况需要让我们的这个tail指向第一个元素的位置;
插入数据之后这个count也就是这个有效的数据的个数也是需要调整的;

下面的这个是取出来这个队列里面的第一个元素以及删除数据(也就是出队列,让我们的这个head指针后移一位就可以了,然后更新我们的这个count即可);
这个取出来第一个元素就更加容易了,直接调用这个顺序表里面的seek,找到这个指定的head指针指向的这个位置的元素);

下面的这个是队列的销毁和我们的这个队列里面的元素的打印,销毁就是销毁释放我们的数据域,然后释放我们的整个队列,打印的话,需要注意我们的这个seek里面的这个第二个参数,需要模上这个size,这个主要也是针对于我们的这个循环队列进行处理的;

下面的这个就是我们的顺序表里面的相关的操作:首先就是插入元素,本来我们的这个顺序表里面进行这个数据的插入是需要移动元素的,但是我们的这个数据结构是队列,只可能是在这个tail指向的这个位置进行这个数据的插入,因此这个直接放在这个tail指向的位置就可以了;

查找的话,就是返回的这个对应的这个position位置的元素:

5.设计循环队列(校招难度)


(img-6kPPuWEg-1735306970521)]
[外链图片转存中…(img-YhrTnc6a-1735306970521)]

相关文章:
基于顺序表实现队列循环队列的处理
文章目录 1.假溢出的现象2.循环队列3.顺序表实现队列架构4.顺序表模拟实现队列5.设计循环队列(校招难度) 1.假溢出的现象 下面的这个就是我们的假溢出的这个现象的基本的来源: 我们的这个队列里面是有9个位置的,我们知道这个队列…...
磁珠选型规范
根据不同的应用场景,磁珠可以分为普通型磁珠,大电流型磁珠和尖峰型磁珠。 (1)普通型磁珠:主要用于电流比较小(小于600mA).无特殊要求的场景,普通型磁珠的直流电阻一般不超过1Ω&…...
linux 点对点语音通话及直播推流实践一: linux USB声卡或耳机 基本配置
inux USB声卡或耳机 基本配置 工具安装查看设备录放音操作录音放音声音配置获取控制信息音量配置本文介绍 linux下alsa声音原件 工具使用方法,包括设备查询、声卡基本配置、录音放音等。 保证 alsa套件可正常操作和配置声卡,是实现SIP语音通话、音视频 采集及推拉流功能的基础…...
3DMAX镂空星花球建模插件FloralStarBall使用方法
3DMAX镂空星花球建模插件FloralStarBall使用教程 就是那个3DMAX镂空星花球建模,再也不用手动做了,使用3DMAX镂空星花球建模FloralStarBall插件可以一键生成! 3DMAX镂空星花球建模插件FloralStarBall,经典星形球体的美丽变体。星形…...
window 安装 nodejs
方式一:使用 fnm 可能会出现 cmd 找不到 nodejs 和 npm 的情况,并且包也可能不知道哪一个 参考链接 Node.js — Download Node.js 使用 powershell 操作,要不然可能有些执行不了 # 安裝 fnm (快速 Node 管理器) winget install Schniz.fnm# …...
Autoware Universe 安装记录
前提: ubuntu20.04,英伟达显卡。 ROS2-Galactic安装 wget http://fishros.com/install -O fishros && . fishros 选择galactic(ROS2)版本,桌面版 ROS2-dev-tools安装 sudo apt install python3-testresources sudo apt update …...
每天40分玩转Django:Django部署概述
一、Django部署概述 在开发阶段,我们通常使用Django内置的轻量级开发服务器runserver。但在生产环境中,为了应对大量并发请求,需要使用高性能的WSGI服务器,如Gunicorn、uWSGI等。同时还要配置Nginx等Web服务器作为反向代理,实现负载均衡、静态文件处理等。下面是Django部署的整…...
使用VS Code开发ThinkPHP项目
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《ThinkPHP 8高效构建Web应用 夏磊 编程与应用开发丛书 清华大学出版社》【摘要 书评 试读】- 京东图书 ThinkPHP 8开发环境安装-CSDN博客 安装ThinkPHP项目的IDE 常用的集成开发环境(IDE)包括P…...
基于深度可分离卷积的MNIST手势识别
基于深度可分离膨胀卷积的MNIST手写体识别 Github链接 项目背景: MNIST手写体数据集是深度学习领域中一个经典的入门数据集,包含了从0到9的手写数字图像,用于评估不同模型在图像分类任务上的性能。在本项目中,我们通过设计一种基…...
Linux服务器pm2 运行chatgpt-on-wechat,搭建微信群ai机器人
安装 1.拉取项目 项目地址: chatgpt-on-wechat 2.安装依赖 pip3 install -r requirements.txt pip3 install -r requirements-optional.txt3、获取API信息 当前免费的有百度的文心一言,讯飞的个人认证提供500万token的额度。 控制台-讯飞开放平台 添加链接描述…...
Word批量更改题注
文章目录 批量更改批量去除空格 在写文章的时候,往往对图片题注有着统一的编码要求,例如以【图 1- xx】。一般会点击【引用】->【插入题注】来插入题注,并且在引用的时候,点击【引用】->【交叉引用】,并且在交叉…...
Springboot配置嵌入式服务器
一.如何定制和修改Servlet容器的相关配置 修改和server有关的配置(ServerProperties); server.port8081 server.context‐path/tx server.tomcat.uri‐encodingUTF‐8 在yml配置文件的写法: server:port: 8081servlet:context-pa…...
正交三角函数全面阐述
目录 1. 正交性定义 2. 正交三角函数 常见的正交三角函数 3. 正交三角函数的特性 4. 正交三角函数在傅里叶分析中的应用 5. 正交三角函数的应用领域 6. 总结 正交三角函数是指在特定条件下,三角函数之间的内积为零。更具体地说,在数学分析、信号处…...
《Vue3 四》Vue 的组件化
组件化:将一个页面拆分成一个个小的功能模块,每个功能模块完成自己部分的独立的功能。任何应用都可以被抽象成一棵组件树。 Vue 中的根组件: Vue.createApp() 中传入对象的本质上就是一个组件,称之为根组件(APP 组件…...
linux中,mysql数据库分片(分库分表)
1.mysql分库分表:解决单个mysql存储上限问题1.实现方法:存储层面:利用分布式存储解决方案分库分表:拆分库和表到其它服务器2.常用设计思路:垂直分库(库里面的表分开)水平分表(表里面的数据分开)分库:数据库分为多个,每个数据库里面都有表,数据均匀存储分库分表:在分的每库里面,…...
springboot503基于Sringboot+Vue个人驾校预约管理系统(论文+源码)_kaic
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装个人驾校预约管理系统软件来发挥其高效地信息处理的作用&am…...
Docker应用-项目部署及DockerCompose
文章目录 Docker应用-项目部署1. 项目部署-后端1.1 修改配置1.2 项目打包1.3 编写Dockerfile1.4 创建镜像1.5 创建并运行容器1.6 测试 2. 项目部署-前端2.1 html前端静态目录2.2 nginx.config编写2.3 部署宿主机服务器2.4 创建容器并挂载2.5 测试 3. DockerCompose3.1 基本语法…...
从0入门自主空中机器人-2-1【无人机硬件框架】
关于本课程: 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程,包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程,带你从0开始,组装属于自己的自主无人机,并让…...
Kafka高性能设计
高性能设计概述 Kafka高性能是多方面协同的结果,包括集群架构、分布式存储、ISR数据同步及高效利用磁盘和操作系统特性等。主要体现在消息分区、顺序读写、页缓存、零拷贝、消息压缩和分批发送六个方面。 消息分区 存储不受单台服务器限制,能处理更多数据…...
Redis字符串底层结构对数值型的支持常用数据结构和使用场景
字符串底层结构 SDS (Simple Dynamic Strings) 是 Redis 中用于实现字符串类型的一种数据结构。SDS 的设计目标是提供高效、灵活的字符串操作,同时避免传统 C 字符串的一些缺点。 struct sdshdr {int len; // 已使用的长度int free; // 未使用的长度char bu…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
