一、队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。
[顺序队列]
:顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。
:队头指针 front,指向队头元素;队尾指针rear,指向下一个入队元素的存储位置
[循环队列]
:无论插入或删除,一旦rear指针增1或front指针增1 时超出了所分配的队列空间,就让它指向这片连续空间的起始位置。
:把队列空间想象成一个环形空间,环形空间中的存储单元循环使用,用这种方法管理的队列也就称为循环队列。
[链式队列]
:特殊的单链表,只在单链表上进行头删尾插的操作
[队列 -> 数组实现]
:队列可以用数组Q[1…m]来存储,数组的上界m即是队列所容许的最大容量。
:队列的运算中需设两个指针:head,队头指针,指向实际队头元素;tail,队尾指针,指向实际队尾元素的下一个位置
[队列 -> 链表实现]
:队列的形成过程中,可以利用线性链表的原理,来生成一个队列
:基于链表的队列,要动态创建和删除节点,效率较低,但是可以动态增长
[队列 -> 基本运算]
:初始化 -> Init_Queue(q)
:入队 -> In_Queue(q,x)
:出队 -> Out_Queue(q,x)
:读队头元素 -> Front_Queue(q,x)
:判队空操作 -> Empty_Queue(q)
二、Java 队列
一级接口
Iterable
: Collection
Map
:ConcurrentMap
二级接口
Collection
:Queue
:Deque # 双向队列
:BlockingQueue
-> BlockingDeque
:
Collection
:List
-> Vector # 容器
-> Stack # 堆
Collection
:Set
实现类
[List]
:LinkedList
[Set]
:HashSet
-> LinkedHashSet
:TreeSet
[Map]
:HashMap
-> LinkedHashMap
:Hashtable
-> Properties
:TreeMap
[Queue]
:PriorityQueue