一、队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。

  1. [顺序队列]
  2. :顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。
  3. :队头指针 front,指向队头元素;队尾指针rear,指向下一个入队元素的存储位置
  4. [循环队列]
  5. :无论插入或删除,一旦rear指针增1front指针增1 时超出了所分配的队列空间,就让它指向这片连续空间的起始位置。
  6. :把队列空间想象成一个环形空间,环形空间中的存储单元循环使用,用这种方法管理的队列也就称为循环队列。
  7. [链式队列]
  8. :特殊的单链表,只在单链表上进行头删尾插的操作
[队列 -> 数组实现]

    :队列可以用数组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