一:队列的定义(先进先出)
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作java怎么实现链表数据结构,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
二:Java API中Queue类的方法摘要
我们在实现队列的代码之前,先来了解一下Java API中Queue类的方法摘要,要知道它是如何创建使用的。
①如何创建Queue对象
首先我们要知道,在Java中队列Queue是一个接口java怎么实现链表数据结构 Java数据结构--队列的代码实现(基于链表+数组),实现一个接口的话我们要重写其中所有的方法。那么这样我们在使用队列的时候就会比较麻烦了。
我们来看一下Java API中的类
在图中我们可以看到类实现了Queue类的接口,因此我们可以把类当做Queue类来使用,这样我们就可以new 类来使用队列
②队列的几种常用方法(入队出队)运用
下面我们来看一下Queue类中的方法摘要,并来运行一下其中最常用的几种方法(入队出队),以便于我们初学者更好的了解并使用队列
三:队列的代码实现(要先了解泛型)
知道了队列是如何创建并使用的,下面我们就基于数组和链表来依次实现队列
1.基于数组的实现 Ⅰ.方法一:动态数组
思路:定义两个指针front和tail,入队在tail位置,更新tail指针java怎么实现链表数据结构,出队在front位置,更新front位置,若数组满了,再去扩展数组长度
如图所示:
Ⅱ.方法二:循环数组(仅限于数据不是很大)
上述单项数组的实现,出队的话front向前移,那么数组中front前面的空间是不是就用不到了。像栈一样,即使队列中有许多操作的情况下,队列也不是很大。那么我们就可以用一个循环数组来优化一下
只要front或者tail到达数组对尾,它就绕回开头
据图我们来了解一下
①入队 offer
②出队 poll
③获取对尾元素但不做出队 peek
④是否为空
2.基于链表的实现
队列的链式存储结构简称为链式队列。它实际上是一个限制仅在表头删除和表尾插入的单链表。
基于链表,首先我们先要创建一个节点对象
①入队 offer
思路:表尾插入,更新tail指针
②出队 poll
思路:表头删除,更新front指针,值得注意的是:如果队列为空,则返回null
③获取对尾元素但不出队 peek
④是否为空
下面我们来剧此实现一下
3.结果显示
①基于循环数组的实现
②基于链表的实现
各位的都实现了吗?
4.其他的队列
除了上述的队列,队列还存在双端队列,优先级队列以及阻塞队列等等,这都需要我们能够熟悉掌握并且熟练应用。
如有错误,不足之处,望各位指出更正₍˄·͈༝·͈˄*₎◞ ̑̑
文章来源:https://blog.csdn.net/m0_74808313/article/details/130236729