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

文章目录

  • 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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NI GPIB设备的GPIB Analyzer功能

GPIB Analyzer支持&#xff1a; 只有名称中带有“”符号的设备或电缆&#xff08;如GPIB或HS&#xff09;支持GPIB Analyzer功能。 示例&#xff1a;GPIB-USB-HS 支持GPIB Analyzer&#xff0c;而 GPIB-USB-HS 和 GPIB-USB-B 不支持。 性能对比&#xff1a; 功能GPIB-USB-B…

微软 CEO 萨提亚・纳德拉:回顾过去十年,展望 AI 时代的战略布局

近日&#xff0c;微软 CEO 萨提亚・纳德拉与著名投资人比尔・格里和布拉德・格斯特纳进行了一场深度对话&#xff0c;回顾了过去十年微软的转型历程&#xff0c;并展望了 AI 时代的战略布局。在这次访谈中&#xff0c;纳德拉分享了他在微软的早期经历&#xff0c;包括他加入微软…

18_HTML5 Web IndexedDB 数据库 --[HTML5 API 学习之旅]

HTML5 Web IndexedDB API 是一种在用户浏览器中存储大量结构化数据的机制&#xff0c;它允许存储和检索键值对&#xff0c;其中键可以是任何有效的JavaScript对象。IndexedDB 主要用于需要复杂查询的数据密集型Web应用。 IndexedDB 的特点&#xff1a; HTML5 Web IndexedDB A…

e3 1220lv3 cpu-z分数

e3 1220lv3 双核四线程&#xff0c;1.1G频率&#xff0c;最低可在800MHZ运行&#xff0c;TDP 13W。 使用PE启动后测试cpu-z分数。 现在e3 1220lv3的价格落到69元。

【ETCD】【实操篇(十五)】etcd集群成员管理:如何高效地添加、删除与更新节点

etcd 是一个高可用的分布式键值存储&#xff0c;广泛应用于存储服务发现、配置管理等场景。为了确保集群的稳定性和可扩展性&#xff0c;管理成员节点的添加、删除和更新变得尤为重要。本文将指导您如何在etcd集群中处理成员管理&#xff0c;帮助您高效地维护集群节点。 目录 …

【机器学习篇】从新手探寻到算法初窥:数据智慧的开启之门

文章目录 【机器学习篇】从新手探寻到算法初窥&#xff1a;数据智慧的开启之门前言一、什么是机器学习&#xff1f;二、机器学习的基本类型1. 监督学习&#xff08;Supervised Learning&#xff09;2. 无监督学习&#xff08;Unsupervised Learning&#xff09;3. 半监督学习&a…

Unity游戏环境交互系统

概述交互功能使用同一个按钮或按钮列表,在不同情况下显示不同的内容,按下执行不同的操作。按选项个数分类环境交互系统可分为两种,单选项交互,一般使用射线检测;多选项交互,一般使用范围检测。第一人称游戏单选多选都可以用,因为第一人称人物背对一个可交互对象时显示交…

虚幻引擎结构之UWorld

Uworld -> Ulevel ->Actors -> AActor 在虚幻引擎中&#xff0c;UWorld 类扮演着至关重要的角色&#xff0c;它就像是游戏世界的总指挥。作为游戏世界的核心容器&#xff0c;UWorld 包含了构成游戏体验的众多元素&#xff0c;从游戏实体到关卡设计&#xff0c;再到物…

【Java】面试题 并发安全 (2)

文章目录 可重入锁&#xff08;ReentrantLock&#xff09;知识总结1. 可重入锁概念与特点2. 基本语法与使用注意事项3. 底层实现原理4. 面试回答要点 synchronized与lock的区别死锁相关面试题讲解死锁产生的四个条件ConcurrentHashMap2. JDK1.7的ConcurrentHashMap结构添加数据…

yolov3算法及其改进

yolov3算法及其改进 1、yolov3简介2、yolov3的改进2.1、backbone的改进2.1.1、darknet19相对于vgg16有更少的参数&#xff0c;同时具有更快的速度和更高的精度2.1.2、resnet101和darknet53&#xff0c;同样具有残差结构&#xff0c;精度也类似&#xff0c;但是darknet具有更高的…

python报错ModuleNotFoundError: No module named ‘visdom‘

在用虚拟环境跑深度学习代码时&#xff0c;新建的环境一般会缺少一些库&#xff0c;而一般解决的方法就是直接conda install&#xff0c;但是我在conda install visdom之后&#xff0c;安装是没有任何报错的&#xff0c;conda list里面也有visdom的信息&#xff0c;但是再运行代…

Jenkins 构建流水线

在 Linux 系统上安装 Jenkins 服务&#xff0c;以及配置自动化构建项目 前置准备环境&#xff1a;docker、docker-compose、jdk、maven 一、环境搭建 1. Jenkins 安装 &#xff08;1&#xff09;拉取镜像 # 安装镜像包&#xff0c;默认安装最新版本 docker pull jenkins/jen…

大数据技术-Hadoop(二)HDFS的介绍与使用

目录 1、HDFS简介 1.1 什么是HDFS 1.2 HDFS的优点 1.3、HDFS的架构 1.3.1、 NameNode 1.3.2、 NameNode的职责 1.3.3、DataNode 1.3.4、 DataNode的职责 1.3.5、Secondary NameNode 1.3.6、Secondary NameNode的职责 2、HDFS的工作原理 2.1、文件存储 2.2 、数据写…

vue3使用element-plus,解决 el-table 多选框,选中后翻页再回来选中失效问题

问题&#xff1a;勾选的数据分页再回来回消失 1.在el-table中加 :row-key"getRowKey" const getRowKey (row) > { return row.id; // id必须是唯一的 }; 2.给type为selection的el-table-column添加上reserve-selection属性 <el-tableref"multipleTab…

go语言的成神之路-筑基篇-gin常用功能

第一节-gin参数绑定 目录 第一节-?gin参数绑定 ShouldBind简要概述 功能&#xff1a; 使用场景&#xff1a; 可能的错误&#xff1a; 实例代码 效果展示 第二节-gin文件上传 选择要上传的文件 选择要上传的文件。 效果展示? 代码部分 第三节-gin请求重定向 第…

五模型对比!Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 光伏功率预测&#xff01;五模型对比&#xff01;Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测(Matlab2023b 多输入单输出) 1.程序已经调试好&#xff0c;替换数据集后&#xff0c;仅运…

12.27【net】【review】【day3】

第三章 l CSMA/CD ( Carrier Sense Multiple Access with Collision Detection) &#xff1a; 载波监听多点接入 / 碰撞 检测。 l 多点接入 &#xff1a; 说明这是总线型 网络。许多 计算机以多点接入的方式连接在一根总线上。 l 载波监听&#xff1a; 即“ 边发送边监听”。…

Python学生管理系统(MySQL)

上篇文章介绍的Python学生管理系统GUI有不少同学觉得不错来找博主要源码&#xff0c;也有同学提到老师要增加数据库管理数据的功能&#xff0c;本篇文章就来介绍下python操作数据库&#xff0c;同时也对上次分享的学生管理系统进行了改进了&#xff0c;增加了数据库&#xff0c…

实现类似gpt 打字效果

1. css的动画&#xff08;animation) css中实现动画有两种方式&#xff1a;transition过渡动画、 animation自定义动画。 具体的可以看MDN链接&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation 使用keyframes自定义关键帧动画并未其命名使用自定义动…

OpenHarmony-5.PM 子系统(2)

电池服务组件OpenHarmony-4.1-Release 1.电池服务组件 Battery Manager 提供了电池信息查询的接口&#xff0c;同时开发者也可以通过公共事件监听电池状态和充放电状态的变化。电池服务组件提供如下功能&#xff1a; 电池信息查询。充放电状态查询。关机充电。 电池服务组件架…