深入学习数据结构之队列
Posted 阿朗~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入学习数据结构之队列相关的知识,希望对你有一定的参考价值。
什么是队列?
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。
与栈不同的是队列遵循“先进后出”,即数据从一端插入,另一端弹出。两端分别进行不同的操作。
注:如果将栈和队列结合,即可以实现双向队列,即两端都可以插入,也都可以弹出。本文仅仅针对单向队列描述。
队列的实现方式
1、数组实现
1.1 插入元素
将rear指针向后移动一个位置,并且将插入的数据放入rear指向地址空间。(如果数组容量不够需要扩容,同栈扩容原理一致)
1.2 弹出元素
数组元素弹出的实现方式有两种
1.2.1 直接移动指针
如上图所示,直接将front指针向后移动一位,数组实际没有发生变化。(内存空间浪费,无效空间无法被GC回收)
1.2.2 数组整体往前移动,删除顶部元素
如上图所示,数组整体向前移动一个位置,front指向位置不变,rear指向位置向前移动一位。(需要频繁的进行数组移动,浪费了性能)
2、链表实现
2.1 插入元素
如上图所示,通过链表实现队列只需要将元素6的下一个节点指针指向新的元素节点7,同时将rear指向新的节点7即可。(不需要提前申请空间,也不需要向数组一样扩容)
2.2 弹出元素
如上图所示,链表弹出元素将元素节点1与元素节点2断开,同时将front指向元素节点2。
3、对比总结
- 从上面几个实现方案可以看出,链表队列比数据队列具有一定的优势。性能上更加优越,因此在日常开发中推荐使用链表队列实现。
以上是关于深入学习数据结构之队列的主要内容,如果未能解决你的问题,请参考以下文章
Java 集合深入理解 :优先队列(PriorityQueue)之源码解读,及最小顶堆实现研究
大数据技术之KafkaKafka概述Kafka快速入门Kafka架构深入
大数据技术之KafkaKafka概述Kafka快速入门Kafka架构深入
大数据技术之KafkaKafka概述Kafka快速入门Kafka架构深入