此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢!
一、队列(Queue)的定义:
- 队列(Queue) : 是只允许在一端进行插入操作,在另一端进行删除操作的特殊的线性表。
队列是一种先进先出(FIFO)的线性表。允许插入的一段称为队尾(an),允许删除的一端称为队头(a1)。
队列在程序设计中用的很频繁。例如,我们用键盘进行各种输入到显示器上的输出;客服系统;操作系统。
同样地,作为一种特殊的线性表,队列也有顺序、链式两种存储结构。
二、队列的抽象数据类型:
队列也有类似线性表的各种操作特性。但操作上会有些区别,特别是插入与删除操作。
Data: 性质同线性表。数据元素具有相同的类型,相邻元素具有前驱和后驱的关系。
[ADT of queue: ]
Operations :
InitQueue(*Q) : Set up an empty queue. //初始化操作,建立一个空队列Q。
DestroyQueue(*Q) : Destroy the queue if it exists. //若队列存在,则销毁它。
ClearQueue(*Q) : Empty the queue. //将队列清空。
QueueEmpty(Q) : (Bool Type) Judge whether the queue is empty. //若队列为空,则返回true,否则返回false。
GetHead(Q, *e) : If the queue exists and not empty, give the top element value to "e" and return "e". //若队列存在且非空,用e返回S的队头元素。
EnQueue(*Q, e) : If the queue exists, push new element "e" into queue to be the top. //若队列存在,插入新元素e到栈S中并成为队尾元素。
DeQueue(*Q, *e) : Delete the top element in stack, give its value to "e", and return "e". //删除队列S中的队头元素,并用e返回其值。
QueueLength(Q) : Return the amount of elements in the queue. //返回队列中元素个数。
end ADT
三、队列的顺序存储结构(Sequential Queue):
基于对队头的标定,关于这种存储结构有两种假设方法:
- 假设一个队列有n个元素,首先我们需要建立一个大于n的数组,并且将队列的所有元素存储在数组的前n个单元,数组下标为0的一端即是队头。易分析得,此时的入队列操作其实就是在队尾追加一个元素,不需要移动任何元素,T(n)=