k:特殊的线性表—队列

【数据结构】队列:先进先出的线性表,如何实现增删查 了解了队列的基本原理和队列对于数据的增删查的操作。可以发现,队列与栈的特性非常相似,队列也继承了线性表的优点与不足,是加了限制的线性表,队列的增和删的操作只能在这个线性表的头和尾进行。在时间复杂度上,循环队列和链式队列的新增、删除操作都为 O(1)。而在查找操作中,队列和线性表一样只能通过全局遍历的方式进行,也就是需要 O(n) 的时间复杂度。在空间性能方面,循环队列必须有一个固定的长度,因此存在存储元素数量和空间的浪费问题,而链式队列不存在这种问题,所以在空间上,链式队列更为灵活一些。... 阅读详情

队列的概念:队列是另一种特殊的线性表,它的特殊性体现在其只允许在线性表的一端插入数据元素,在线性表的另一端删除数据元素(一般会采用在线性表的表尾那端(没被head指针所指的那端)插入数据元素,在线性表的表头(被head指针所指的那端)那端删除数据元素,因为按照此种方式进行操作的队列,无论采用的是顺序存储方式的物理结构还是链式存储方式的物理结构,其插入和删除数据元素的时间复杂度为O(1))。所以队列是一种操作受限的特殊的线性表,它具有先进先出(First In First Out,FIFO)或(Last In Last Out,LILO)的特性。
 运行进行插入的一端称为队尾(rear),运行进行删除的一端成为队首(front)。队列的插入操作通常成为入队操作,而删除操作通常称为出队操作。

队列的相关API(java):
public interface Queue&ltT>
{
 public abstract void clear();//清空
 public abstract boolean isEmpty();//判空
 public abstract int length();//求长度
 public abstract T peek();//取队首元素
 public abstract void offer(T x)throws Exception;//入队
 public abstract T poll();//出队
}

 同栈一样,队列也有顺序和链式两种存储结构。顺序存储结构的队列称为顺序队列,链式存储结构的队列称为链队列。

顺序队列:
 对于顺序队列,采用数组的方式进行实现,在实现类中维护两个int型变量front和rear(一般而言int型够用了)用于记录队首的索引值和队尾的下一个存储单元的索引值,其值随着入队和出队的操作而发生改变。但是,由于采用数组的方式对队列进行实现,所以,其可能会发生“假溢出”的情况,所谓的“假溢出”即是因顺序队列的多次入队和出队操作后出现有存储空间,但是不能进行入队操作的溢出现象。
 要解决“假溢出”问题,最好的办法就是把顺序队列所使用的存储空间看成一个逻辑上首尾相连的循环顺序队列。但是对于循环顺序队列而言,其需要考虑的一个问题是出现了判空和判满的条件均为front==rear的情况,要解决判空和判满的条件均为front==rear的情况,有三种解决的办法。
 第一种:采用少用数组中的一个存储单元的方式,当顺序存储空间的容量为maxSize时,只允许最多存放maxSize-1个数据元素。此时,队空的判断条件为front==rear,而队满的判断条件为:front==(rear+1)%maxSize
 第二种:采用设置一个boolean型标识变量flag的方法,设其初始化值为false;当入队操作成功后就置该标识为true;每当出队操作成功后,就置为false;则此时队空的判断条件为:front==rear&&!flag,而队满的判断条件为:front==rear&&flag
 第三种:采用设置一个计数器的方式,在实现队列的过程中,引入一个计数变量num,其初始化值为0,每当入队操作成功后,就将计数变量num的值加一;每当出队操作成功后,就将计数变量num的值减一,则此时队空的判断条件为:num==0,队满的判断条件为:num>0&&front==rear

 采用以上任何一种解决循环顺序队列判空和判满条件相同的,计算其队列中元素个数的时候,均可以使用(rear-front+maxSize)%maxSize的计算方式计算出队列的长度,其中maxSize为数组的长度。

ps:
 由于队列的实现可以在线性表的实现之上进行修改,从而得到相关的值,为此,不在此处进行实现。对于顺序队列而言,其API中相关的方法的实现其时间复杂度均为O(1)。对于链队列,其API中相关的方法的实现,其时间复杂度也均为O(1)。关于链队列和顺序队列的孰优孰劣的比较,个人认为和顺序栈和链栈的相同,可以参考http://blog.youkuaiyun.com/mystringisnotnull/article/details/77711891。
 对于链队列,其在java中相关的实现为Queue<T> queue=new LinkedList<T>();其中,T为泛型(Queue接口和LinkedList类均在java.util包中)
 对于顺序队列,其在java中相关的实现为Queue<T> queue=new ArrayList<T>();其中,T为泛型(Queue接口和ArrayList类均在java.util包中)

对于队列,其有一个重要的变形,就是优先队列,对于优先队列,其也是队列的一种,也满足队列的相关API,但是,优先队列不满足先进先出的特点,因为优先队列在插入数据元素的时候,其不是限定在队尾进行插入的,而是顺序插入到队列的合适的位置,以确保队列的优先顺序,同时,优先队列也可以采用顺序和链式两种存储结构。一般而言,在考虑到优先队列中,既要保证快速的访问到优先级高的数据元素,又要保证可以较快的实现插入操作,所以通常以链式存储结构来实现优先队列。
对于优先队列的实现,这里进行省略。在java中,优先队列的实现类为PriorityQueue,其相关的使用及其事例,参见http://blog.youkuaiyun.com/hiphopmattshi/article/details/7334487

队列也是一种特殊的线性表 在本章的应用部分,给出了四个使用队列的应用。第一个应用是关于5 . 5 . 3节所介绍的火车 车厢重排问题。在本章中对这个问题做了修改,要求缓冲铁轨按F I F O方式而不是L I F O方式工 作;第二个应用是关于寻找两个给定点之间最短路径的问题,这是一个经典的问题。可以把这 个应用看成是5 . 5 . 6节迷宫问题的一种变化,即寻找从迷宫入口到迷宫出口的最短路径。5 . 5 . 6节 中的代码并不能保证得到一条最短的路径... 立即下载

相关推荐

一体化伺服电机与施耐德PLC TM241CEC24T在Canopen协议下的应用

一.硬件组成 软件组成:施耐德SoMachineV4.3二.○1.打开SoMachineV4.3,点击“新建项目”○2.点击“空白项目”○3.项目命名○4.点击“创建项目” 三. 点击“Logic Builder” 四. ○1.右击项目”PMM_CANOPEN_ST”添加设备○2.点击”LogicController”选择PLC型号TM241CEC24T/U○3.点击“添加设备” 五. ○1.右击CAN_1,添加设备○2.选择“CANopen Perfomance”○3.点击“添加设备”

m0_46512607的博客 2521

【算法修炼之道】——队列

什么是队列(Queue)???——》是一种线性存储结构,也就是存储数据的存储结构;但是注意啦!!!——》不是数据结构; 那么队列有什么特点???——》 队列中数据是按照"先进先出(FIFO, First-In-First-Out)或后进后出"方式进出队列的; 队列只允许在"队首"进行删除操作,而在"队尾"进行插入操作;   讲完了特点,那就到队列的基本操作啦!!!——》入队和出队 ...

YHJ 307

Sharding-JDBC 系列专题 - 第九篇:高可用性与集群管理

高可用性是指系统在面对故障(如数据库宕机、网络中断)时,能够快速恢复并继续提供服务。Sharding-JDBC 和 Sharding-Proxy 提供了多种机制支持高可用性,同时需要结合底层数据库的高可用方案(如 MySQL 主从复制、MHA)来实现。高可用性和集群管理是 Sharding-JDBC 和 Sharding-Proxy 在生产环境中成功应用的关键。本篇详细介绍了数据库高可用方案、Sharding-JDBC 的故障切换机制、Sharding-Proxy 的集群部署,以及分布式治理功能。

资深架构师分享:深入剖析软件架构,探讨云计算、微服务、大数据等前沿技术。分享实践经验,促进技术交流,共同构建卓越系统。 1393

数据结构2 - 栈与队列

1. 栈 栈是一种特殊的线性表,栈的插入和删除只允许在表的尾端进行。其中,栈中允许插入和删除操作的一端成为栈顶,另一端称为栈底。

Janet的博客 514

C#实践项目1

需求: 在CAD内实现两个坐标系的转换。 转换方式为文件内的所有图形从一个坐标系下的坐标,转换到另一个坐标系下的坐标。 进行坐标转换后,仅仅是坐标发生改变,图层、样式等等不会发生变化。

weixin_51182789的博客 5328

仅使用 Python 创建的 Web 应用程序(前端版本)第03章Streamlit-多页面

接下来,我们将解释多页面切换。Streamlit 没有“多页面”或“页面路由”等功能。另一方面,通过根据用户动作切换要执行的功能,可以使其看起来好像存在“多个页面”。注意:我认为它类似于 SinglePageApplication (SPA)。然而,根据 React、Vue 等中使用的 URL 路径来更改页面的路由很困难。还有一个用于获取查询参数的实验性 API,但如果您确实需要这种功能,我认为认真尝试编写 React 或 Vue 是个好主意。我们来看一个通过按下按钮来切换页面的示例,如下所示。

xianyinsuifeng的博客 1330

第三章——栈和队列的知识体系II

队列 1.队列的概念 队列也是一种操作受限的线性表,先进先出,简称(FIFO)。在表的一端插入(表尾),在另一端删除(表头)。 栈和队列都是操作受限的线性表,因此不是任何对线性表的操作都可以作为栈和队列的操作。比如,不可以随便读取栈和队列中间的某个数据。 2.队列的顺序存储结构 队列的顺序实现是指分配一块连续的存储单元存放队列中的元素,并设两个指针:对头指针和队尾指针。front指向队头元素,rear指向队尾元素的位置。 2.1队列的顺序存储结构 #define MAXSIZE 100 //队列所达到的

weixin_42705436的博客 774

【开发必备插件】iframe嵌套报“拒绝连接请求”的本地解决方法

关键词:iframe 拒绝连接、X-Frame-Options、Chrome 插件、前端调试、Allow X-Frame-Options前几天我在本地项目里调试一个第三方网站的嵌入页面时,遇到了一个非常经典的报错:xxx.com 拒绝了我们的连接请求。熟悉的老前端们一眼就知道——这是。但对于日常开发来说,我们经常需要在本地测试 iframe 嵌套外部页面(比如嵌第三方登录页、支付页、可视化报表系统等)。而线上站点配置了或DENY时,就会直接导致 iframe 加载失败。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1545

数据结构——特殊的线性表(队列)

定义:队列是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。

m0_61705102的博客 947

DataEase 未授权+远程代码执行漏洞复现(CVE-2025-49001、CVE-2025-49002)

DataEase 是一款开源的数据分析平台,提供丰富的数据可视化和分析功能,帮助用户轻松地进行数据探索和决策支持。近日,有关DataEase 被爆出多个漏洞,其中 CVE-2025-49001 是由于JWT校验机制错误导致攻击者可伪造JWT令牌绕过身份验证流程,CVE-2025-49002 是由于H2数据库模块没有严格过滤用户输入的JDBC连接参数,可使用大小写绕过补丁。攻击者可利用这些漏洞实现未授权代码执行,威胁用户数据和系统的安全。

李同學AI安全 1947

含分布式电源的配电网三段式电流保护影响仿真研究

文章摘要 本文研究了分布式电源(DG)接入对配电网三段式电流保护的影响。通过在Matlab/Simulink平台搭建含同步发电机型DG的10kV配电网模型,设计了基于傅里叶算法的三段式电流保护模块(I段瞬时速断、II段限时速断、III段定时限过流)。研究分析了不同DG接入位置、容量及故障点对保护系统的影响机理。仿真结果表明,DG接入会改变故障电流特性,可能导致三种典型问题:保护范围扩大引起误动、保护灵敏度下降导致拒动,以及保护选择性丧失。该研究为含DG配电网的保护配置与整定提供了理论依据和仿真参考,对保障分

huanghm88的专栏 272

循环队列(特殊的线性表)

循环队列(一) 队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 循环队列 为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。 消除假溢出

suiyue811的博客 478

uniapp - 微信授权登录报错 errMsg“:“login:fail send“ | “code“:-100 | “innerCode“:-6,解决uni-app调用微信登录时没有响应且返回错误

uni-app,微信登录,微信登录报错,微信小程序,支付宝小程序,安卓app,苹果ios,nvue,H5网页网站,uniapp苹果安卓app,微信授权登录,uniAppAPP端微信登录报错,微信确认登录界面后点击登录报错,"errMsg":"login:failsend","errCode":-100,"code":-100,"innerCode":-6,都配置好了还是报错怎么办,uniapp微信授权登录报错,UniApph5对接微信登录出现错误,appid,应用签名,微信登陆,code:-100

🏆 前端领域优质创作者 1万+

k:特殊的线性表—队列

队列的概念:  队列是另一种特殊的线性表,它的特殊性体现在其只允许在线性表的一端插入数据元素,在线性表的另一端删除数据元素(一般会采用在线性表的表尾那端(没被head指针所指的那端)插入数据元素,在线性表的表头(被head指针所指的那端)那端删除数据元素,因为按照此种方式进行操作的队列,无论采用的是顺序存储方式的物理结构还是链式存储方式的物理结构,其插入和删除数据元素的时间复杂度为O(1...

diaosangwan0363的博客 442

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

队列--先进先出的线性表

前面的文章介绍了线性表,后进先出的线性表–栈。本文介绍另一种特殊的链表–队列以及队列的增删查。 1.队列的定义 与栈相似,队列也是一种特殊的线性表,与线性表的不同之处也是体现在对数据的增和删的操作上。 队列的特点是先进先出: 先进,表示队列的数据新增操作只能在末端进行,不允许在队列的中间某个结点后新增数据; 先出,队列的数据删除操作只能在始端进行,不允许在队列的中间某个结点后删除数据。也就是说队列的增和删的操作只能分别在这个队列的队尾和队头进行。 与线性表、栈一样,队列也存在这两种存储方式,即顺序队列和

Yangchenju的博客 7460

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

初谈线性表

The Art of Computer Programming

qq_37407968的博客 802

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

数据结构--线性表(数组、链表、栈、队列)

线性表 线性逻辑结构特征: 集合中存在唯一的第一个数据元素、最后一个数据元素,集合中剩余的每个数据元素均有唯一的直接前驱元素和唯一的直接后继元素 线性表的物理实现 数组: 它用一组连续的内存空间,来存储一组具有相同类型的数据。数组的空间是从栈分配的。 数组优点: 简单易用 访问元素快(常数时间) 数组缺点: 大小固定:是静态的(并且要在使用前指定数组大小) 基于位置的插入操作实现复杂(为了内存的连续性,需要搬移数据) 分配一个块:若申请内存空间很大,比如100M,但若内存空间没有100M的连

weixin_43847183的博客 958

线性表(顺序表、链表、栈、队列、特殊数组)

常考的线性表相关代码(C语言),包含顺序表、链表、栈、队列、特殊数组(主要指三元组)。不包含串,通常串不考代码

weixin_52323547的博客 533

abcde依次进入一个队列_TAOCP|基本算法|栈、队列与双端队列

传说中的计算机圣经TAOCP,虽然我自己啃完这套书不太现实,但是还是先记录自己读书的历程。本文主要记载了数据结构受限情况下,序列变换的相关问题。在计算机表示的设计形式中,我们不但考虑数据结构,而且考虑在数据上执行的操作类型。形式线性表是n≥0个节点的序列X[1],X[2],...,X[n],它的基本结构性质仅是各个项排成一行时的相对位置。在这种结构中,我们只关心一个事实:n>0,则X[1]是...

weixin_29054523的博客 789

队列(queue)与优先队列(priority_queue)

/typedef可以是任意基本数据类型或容器。如:queue<int> q;//整型队列容器//typename可以是任意基本数据类型或容器,按照降序对队列元素排序。如:priority_queue<int> pq;//整型降序优先队列注:优先级队列默认使用vector作为其底层存储数据的容器, 在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_ queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_ queue。

2302_79459176的博客 1508

6、增删改 - 队列 - 先进先出的线性表

队列是什么 与栈相似,队列也是一种特殊的线性表,与线性表的不同之处也是体现在对数据的增和删的操作上。 队列的特点是先进先出: 先进,表示队列的数据新增操作只能在末端进行,不允许在队列的中间某个结点后新增数据; 先出,队列的数据删除操作只能在始端进行,不允许在队列的中间某个结点后删除数据。也就是说队列的增和删的操作只能分别在这个队列的队尾和队头进行,如下图所示: 与线性表、栈一样,队列也存在这两种存储方式,即顺序队列和链式队列: 顺序队列,依赖数组来实现,其中的数据在内存中也

qq_55961812的博客 277

队列:先进先出的线性表,如何实现增删查?

在时间复杂度上,循环队列和链式队列的新增、删除操作都为 O(1)。而在查找操作中,队列和线性表一样只能通过全局遍历的方式进行,也就是需要 O(n) 的时间复杂度。在空间性能方面,循环队列必须有一个固定的长度,因此存在存储元素数量和空间的浪费问题,而链式队列不存在这种问题,所以在空间上,链式队列更为灵活一些。通常情况下,在可以确定队列长度最大值时,建议使用循环队列。无法确定队列长度时,应考虑使用链式队列。队列具有先进先出的特点,很像现实中人们排队买票的场景。

我乐了的博客 535

数据结构学习之特殊线性表 队列

顺序基本定义 typedef 100 maxsize; typedef int elemtype; elemtype item[maxsize]; int front; int rear; 结构定义 #define maxsize 100; typedef int elemtype; struct qnode{ elemtype num[maxsize]; int front ,rear; ...

Abser的博客 407

数据结构入门(2)——线性表、堆栈和队列

数据结构入门——线性表、堆栈和队列

博客 1310

abcde依次进入一个队列_一个队列的入队序列为:abcde,则队列的出队序列是( )。

【判断题】在具有头结点的单链表中,头指针指向单链表中第一个元素结点。【单选题】n个结点的线索二叉树上含有的线索数为( ) 。【判断题】A 算法的时间复杂度为O(n),B算法的时间复杂度为O(2 n ),则说明随着问题规模n的增大,A算法比B算法有效。【判断题】 串与普通线性表相比较,它的特殊性体现在只可以顺序存储。【单选题】下面关于线性表的叙述中,错误的是( )。【单选题】若某线性表最常用的操作...

weixin_35888365的博客 4984
上一篇: Q:关于栈的常见问题
下一篇: K:栈和队列的比较
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值