当前位置: 首页 > news >正文

基于顺序表实现队列循环队列的处理

文章目录

  • 1.假溢出的现象
  • 2.循环队列
  • 3.顺序表实现队列架构
  • 4.顺序表模拟实现队列
  • 5.设计循环队列(校招难度)

1.假溢出的现象

下面的这个就是我们的假溢出的这个现象的基本的来源:

我们的这个队列里面是有9个位置的,我们知道这个队列里面应该是从后面进队列,从前面出队列,因此这个划去的这个1,2,3就是出队列的,因此我们的这个里面的这个head指针,也就是我们说的这个头指针,就是指向的我们的这个队列里面当前的第一个有效的元素;

但是随着我们的这个数据不断地进入我们的这个队列,这个时候,我们的这个队列里面的尾指针,也就是这个图上面的这个tail指针很快就指向了我们的这个队列的最后一个元素的下一个位置,因此这个时候我们想要插入这个10这个元素的时候,就不可以了;

但是我们发现这个队列里面是有9个位置的,但是这个里面的这个时候的有效的这个数据的个数就是6个,显然在我们的这个队列的前面是有这个空位置的,但是我们的这个10就是无法插入,在当前的这个数据结构下面;

就比如你去吃饭,餐馆里面是9个桌子,一共只有6个是有人的,但是你进去的时候,小二告诉你这个餐馆满了,你作何感想?这个现象就是我们的假溢出现象;

image-20241227194339419

假溢出说的其实就是我们的这个这个tail指向的这个位置是我们的队列外面的这个位置,好像表示这个队列是溢出的,但是这个队列前面还是有数据空位置的,我们把这个情况称之为“假溢出”—好像是溢出的,但是实际上不是满的,这个其实名字和这个情况是高度匹配的,很容易理解;

2.循环队列

循环队列的引入就是为了解决上面出现的这个假溢出的情况:

就是当我们的这个tail指向的这个位置超过我们的这个队列里面的这个最后一个元素的这个范围之后,我们就让他指向我们的队列的开始位置,因为这个时候我们的开始的位置是有空位置的,这样就可以有效的解决这个假溢出的现象;

但是随着这个循环队列的这个引入,我们需要多引入一个变量,就是count,这个表示的就是我们的这个队列里面的这个有效元素的个数,当我们的这个count<size也就是小于我们的队列的大小的时候,我们就可以认为这个队列是假溢出的,我们可以让这个tail指向我们的第一个元素即可;

image-20241227195708091

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

image-20241227201214221

3.顺序表实现队列架构

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

image-20241227202537348

4.顺序表模拟实现队列

因为我们的这个队列是基于这个顺序标的,所以这个队列实现的过程中会使用到这个顺序表里面的这个相关的方法,需要我们进行人为的这个补充;

下面的这个代码里面使用的是queue表示的是和我们的这个队列的相关的方法,这个vector就是顺序表里面的相关的方法的这个调用;

1)判断是不是空的,直接查看这个count也就是这个数据域里面的这个有效的数据个数是不是为0即可;

2)push就是直接进行这个数据的插入即可,首先需要看看是不是可以进行插入,如果我们的这个队列本来就是满的,这个时候肯定是无法进行这个插入的操作的;

然后就是如果可以进行这个插入的操作,我们就是调用的这个顺序表里面的这个数据的插入的方法,插入之后就让我们的这个末尾的指针后移一位即可,如果出现这个假溢出的情况需要让我们的这个tail指向第一个元素的位置;

插入数据之后这个count也就是这个有效的数据的个数也是需要调整的;

image-20241227211124096

下面的这个是取出来这个队列里面的第一个元素以及删除数据(也就是出队列,让我们的这个head指针后移一位就可以了,然后更新我们的这个count即可);

这个取出来第一个元素就更加容易了,直接调用这个顺序表里面的seek,找到这个指定的head指针指向的这个位置的元素);

image-20241227212031103

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

image-20241227212156308

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

image-20241227212351183

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

image-20241227212533910

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

image-20241227212831515

image-20241227214137513

(img-6kPPuWEg-1735306970521)]

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

image-20241227214157456

相关文章:

基于顺序表实现队列循环队列的处理

文章目录 1.假溢出的现象2.循环队列3.顺序表实现队列架构4.顺序表模拟实现队列5.设计循环队列&#xff08;校招难度&#xff09; 1.假溢出的现象 下面的这个就是我们的假溢出的这个现象的基本的来源&#xff1a; 我们的这个队列里面是有9个位置的&#xff0c;我们知道这个队列…...

磁珠选型规范

根据不同的应用场景&#xff0c;磁珠可以分为普通型磁珠&#xff0c;大电流型磁珠和尖峰型磁珠。 &#xff08;1&#xff09;普通型磁珠&#xff1a;主要用于电流比较小&#xff08;小于600mA&#xff09;.无特殊要求的场景&#xff0c;普通型磁珠的直流电阻一般不超过1Ω&…...

linux 点对点语音通话及直播推流实践一: linux USB声卡或耳机 基本配置

inux USB声卡或耳机 基本配置 工具安装查看设备录放音操作录音放音声音配置获取控制信息音量配置本文介绍 linux下alsa声音原件 工具使用方法,包括设备查询、声卡基本配置、录音放音等。 保证 alsa套件可正常操作和配置声卡,是实现SIP语音通话、音视频 采集及推拉流功能的基础…...

3DMAX镂空星花球建模插件FloralStarBall使用方法

3DMAX镂空星花球建模插件FloralStarBall使用教程 就是那个3DMAX镂空星花球建模&#xff0c;再也不用手动做了&#xff0c;使用3DMAX镂空星花球建模FloralStarBall插件可以一键生成&#xff01; 3DMAX镂空星花球建模插件FloralStarBall&#xff0c;经典星形球体的美丽变体。星形…...

window 安装 nodejs

方式一&#xff1a;使用 fnm 可能会出现 cmd 找不到 nodejs 和 npm 的情况&#xff0c;并且包也可能不知道哪一个 参考链接 Node.js — Download Node.js 使用 powershell 操作&#xff0c;要不然可能有些执行不了 # 安裝 fnm (快速 Node 管理器) winget install Schniz.fnm# …...

Autoware Universe 安装记录

前提&#xff1a; ubuntu20.04&#xff0c;英伟达显卡。 ROS2-Galactic安装 wget http://fishros.com/install -O fishros && . fishros 选择galactic(ROS2)版本&#xff0c;桌面版 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 常用的集成开发环境&#xff08;IDE&#xff09;包括P…...

基于深度可分离卷积的MNIST手势识别

基于深度可分离膨胀卷积的MNIST手写体识别 Github链接 项目背景&#xff1a; MNIST手写体数据集是深度学习领域中一个经典的入门数据集&#xff0c;包含了从0到9的手写数字图像&#xff0c;用于评估不同模型在图像分类任务上的性能。在本项目中&#xff0c;我们通过设计一种基…...

Linux服务器pm2 运行chatgpt-on-wechat,搭建微信群ai机器人

安装 1.拉取项目 项目地址: chatgpt-on-wechat 2.安装依赖 pip3 install -r requirements.txt pip3 install -r requirements-optional.txt3、获取API信息 当前免费的有百度的文心一言&#xff0c;讯飞的个人认证提供500万token的额度。 控制台-讯飞开放平台 添加链接描述…...

Word批量更改题注

文章目录 批量更改批量去除空格 在写文章的时候&#xff0c;往往对图片题注有着统一的编码要求&#xff0c;例如以【图 1- xx】。一般会点击【引用】->【插入题注】来插入题注&#xff0c;并且在引用的时候&#xff0c;点击【引用】->【交叉引用】&#xff0c;并且在交叉…...

Springboot配置嵌入式服务器

一.如何定制和修改Servlet容器的相关配置 修改和server有关的配置&#xff08;ServerProperties&#xff09;&#xff1b; server.port8081 server.context‐path/tx server.tomcat.uri‐encodingUTF‐8 在yml配置文件的写法&#xff1a; server:port: 8081servlet:context-pa…...

正交三角函数全面阐述

目录 1. 正交性定义 2. 正交三角函数 常见的正交三角函数 3. 正交三角函数的特性 4. 正交三角函数在傅里叶分析中的应用 5. 正交三角函数的应用领域 6. 总结 正交三角函数是指在特定条件下&#xff0c;三角函数之间的内积为零。更具体地说&#xff0c;在数学分析、信号处…...

《Vue3 四》Vue 的组件化

组件化&#xff1a;将一个页面拆分成一个个小的功能模块&#xff0c;每个功能模块完成自己部分的独立的功能。任何应用都可以被抽象成一棵组件树。 Vue 中的根组件&#xff1a; Vue.createApp() 中传入对象的本质上就是一个组件&#xff0c;称之为根组件&#xff08;APP 组件…...

linux中,mysql数据库分片(分库分表)

1.mysql分库分表:解决单个mysql存储上限问题1.实现方法:存储层面:利用分布式存储解决方案分库分表:拆分库和表到其它服务器2.常用设计思路:垂直分库(库里面的表分开)水平分表(表里面的数据分开)分库:数据库分为多个,每个数据库里面都有表,数据均匀存储分库分表:在分的每库里面,…...

springboot503基于Sringboot+Vue个人驾校预约管理系统(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装个人驾校预约管理系统软件来发挥其高效地信息处理的作用&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【无人机硬件框架】

关于本课程&#xff1a; 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程&#xff0c;包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程&#xff0c;带你从0开始&#xff0c;组装属于自己的自主无人机&#xff0c;并让…...

Kafka高性能设计

高性能设计概述 Kafka高性能是多方面协同的结果&#xff0c;包括集群架构、分布式存储、ISR数据同步及高效利用磁盘和操作系统特性等。主要体现在消息分区、顺序读写、页缓存、零拷贝、消息压缩和分批发送六个方面。 消息分区 存储不受单台服务器限制&#xff0c;能处理更多数据…...

Redis字符串底层结构对数值型的支持常用数据结构和使用场景

字符串底层结构 SDS (Simple Dynamic Strings) 是 Redis 中用于实现字符串类型的一种数据结构。SDS 的设计目标是提供高效、灵活的字符串操作&#xff0c;同时避免传统 C 字符串的一些缺点。 struct sdshdr {int len; // 已使用的长度int free; // 未使用的长度char bu…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...