数据结构与算法-队列
admin
2024-02-14 19:01:41
0

什么是队列
队列是一种特殊的线性表,说特殊是因为它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。例如我们去商店收银排队结账一样,就是一个队列,是一种FIFO先入先出的数据结构。

算法原理
1、初始化定长队列
2、插入元素需要先判断队列是否已经达到上限,达到上限进行扩容,否则进行队尾指针增加并插入元素
3、移除元素需要判断队列是否已经为空,为空抛出异常,否则将队首置空并重新规划队列

小试牛刀
1、创建队列模拟类,并提供入队、出队方法

/*** 队列* @author senfel* @version 1.0* @date 2022/11/25 16:07*/
@Slf4j
public class Queue {/*** 队列数组*/private Object[] elementList;/*** 队头*/private int head;/*** 队尾*/private int tail;/*** 队列长度*/private int capacity;public Queue(int capacity) {this.capacity = capacity;this.elementList = new Object[capacity];this.head = 0;this.tail = -1;}/*** 元素个数* @return*/public int size(){return tail-head+1;}/*** 队列是否为空* @return*/public Boolean isEmpty(){return tail == -1;}/*** 队列长度* @return*/public int queueLength(){return elementList.length;}/*** 入队* @param element* @author senfel* @date 2022/11/25 16:26* @return void*/public void add(Object element){//队列满了扩容至两倍大小if(tail+1 >= elementList.length){log.error("队列达到最大容量:{}",capacity);int length = 0;if(elementList.length << 1 > Integer.MAX_VALUE){length = Integer.MAX_VALUE;}else{length = elementList.length << 1;}capacity = length;log.error("队列达到最大容量扩容至:{}",capacity);elementList = Arrays.copyOf(elementList,length);}//尾部索引增加并赋值elementList[++tail] = element;log.error("入队元素:{}",elementList[tail]);log.error("当前队列详情:{}",Arrays.toString(elementList));log.error("当前队列元素个数:{}",size());}/*** 出队* @author senfel* @date 2022/11/25 16:36* @return void*/public void remove(){if(isEmpty()){throw new RuntimeException("队列为空");}log.error("出队元素:{}",elementList[head]);elementList[head] = null;//队列重排Object[] newQueue = new Object[capacity];System.arraycopy(elementList,head+1,newQueue,0,size());elementList = newQueue;tail--;log.error("当前队列详情:{}",Arrays.toString(elementList));log.error("当前队列元素个数:{}",size());}}

2、提供测试方法

public static void main(String[] args) {Queue queue = new Queue(5);for(int i = 0;i<7;i++){queue.add(i);}log.error("队列长度为:{}",queue.queueLength());//模拟出队queue.remove();queue.remove();log.error("队列长度为:{}",queue.queueLength());}

3、加粗样式查看测试结果并展示出入队详情

17:01:13.028 - 入队元素:0
17:01:13.031 - 当前队列详情:[0, null, null, null, null]
17:01:13.031 - 当前队列元素个数:1
17:01:13.031 - 入队元素:1
17:01:13.031 - 当前队列详情:[0, 1, null, null, null]
17:01:13.031 - 当前队列元素个数:2
17:01:13.031 - 入队元素:2
17:01:13.031 - 当前队列详情:[0, 1, 2, null, null]
17:01:13.031 - 当前队列元素个数:3
17:01:13.031 - 入队元素:3
17:01:13.031 - 当前队列详情:[0, 1, 2, 3, null]
17:01:13.031 - 当前队列元素个数:4
17:01:13.031 - 入队元素:4
17:01:13.031 - 当前队列详情:[0, 1, 2, 3, 4]
17:01:13.031 - 当前队列元素个数:5
17:01:13.031 - 队列达到最大容量:5
17:01:13.031 - 队列达到最大容量扩容至:10
17:01:13.031 - 入队元素:5
17:01:13.031 - 当前队列详情:[0, 1, 2, 3, 4, 5, null, null, null, null]
17:01:13.031 - 当前队列元素个数:6
17:01:13.031 - 入队元素:6
17:01:13.031 - 当前队列详情:[0, 1, 2, 3, 4, 5, 6, null, null, null]
17:01:13.031 - 当前队列元素个数:7
17:01:13.031 - 队列长度为:10

17:01:13.031 - 出队元素:0
17:01:13.031 - 当前队列详情:[1, 2, 3, 4, 5, 6, null, null, null, null]
17:01:13.031 - 当前队列元素个数:6
17:01:13.031 - 出队元素:1
17:01:13.031 - 当前队列详情:[2, 3, 4, 5, 6, null, null, null, null, null]
17:01:13.031 - 当前队列元素个数:5
17:01:13.031 - 队列长度为:10

相关内容

热门资讯

生物细胞治病是假的 生物细胞治病是假的当肿瘤存在时,身体的免疫功能受到抑制,此时无论用何种免疫治疗,都是没有意义的。所以...
写笑容的句子唯美 写笑容的句子唯美关于笑容的优美句子汇总如下1. 朋友,愿你开口常笑笑容真,等着幸福来敲门!2. 嘴角...
汽车撞了以后会散架爆炸吗 汽车撞了以后会散架爆炸吗汽车撞了以后会散架爆炸吗,一般来说汽车碰撞产生高温引起汽油燃烧才会导致爆炸。...
《风起云涌》新手演示视频攻略 《风起云涌》新手演示视频攻略《风起云涌》是一款即时战略类游戏,游戏的故事设定在荒芜人烟的星球,该星球...
立志奋进的励志名人名言 立志奋进的励志名人名言【 #励志名言# 导语】在学习、工作或生活中,大家都对那些经典的名言很是熟悉...
这是什么花 这是什么花蔷薇科蔷薇属的野蔷薇的变种——七姊妹,又名七姐妹
任达华和妻子的爱情生活,像不像... 任达华和妻子的爱情生活,像不像现实版的童话?像。因为他们是娱乐圈少有的甜蜜,将生活过了二人世界,所以...
求《恐龙大作战》的征文怎么写 求《恐龙大作战》的征文怎么写我还没学过写征文自己先观看,然后可以适当的在知网上找相关素材
求水印大的《衣冠禽兽》全文(包... 求水印大的《衣冠禽兽》全文(包括VIP)在 自由自在完结文库 中有。
北京怎样寻找故友? 北京怎样寻找故友?北京新街口居住过的张乃池女士,张秋生男士现在何处?... 北京新街口居住过的张乃...
长期获胜!为什么美女炒股总是赚... 长期获胜!为什么美女炒股总是赚钱  【前言】我经过多年的总结,发现在股票市场长期能获胜的股民之中,美...
摆动的小球 摆动的小球摆动的小球摆到与竖直呈60度夹角时速度为零,此刻球对绳有拉力吗?咋解释?这其实就是动量守恒...
有哪些名人以前是从消极走向成功... 有哪些名人以前是从消极走向成功的。故事又是怎么样的,他又是怎么想的?不多,一、两个就可以了高祖刘邦,...
江南大学的动画 江南大学的动画我今年拿了江大的合格证,我非常想报江大动画专业,请问动画的学长去年江大动画的录取综合分...
小学生万里长城知识 小学生万里长城知识长城是中华文明的瑰宝,是中国古代人民智慧的结晶,也是中华民族的象征。 长城中国古代...
寻找被自己抛弃的女儿 寻找被自己抛弃的女儿寻找被自己抛弃的女儿难言之隐,有苦衷!留下联系电话号码吧!
关于校园生活的名人名言 关于校园生活的名人名言 1) 学校是造就人的工场。——[捷]夸美纽斯  2) 亡而存之,废而举之...
历史上的5月8日发生了哪些事件... 历史上的5月8日发生了哪些事件?2020年5月8日,李清杉和黄芳迎牵小手谈恋爱
请问这是一部什么电影? 请问这是一部什么电影?预见未来?
问一本世界名著的名字 问一本世界名著的名字《小妇人》吧。看过的书里这本最符合了。希望可以帮助到您。悲惨世界是不是