队列

来源:互联网 发布:怎么购买捷易通软件 编辑:程序博客网 时间:2024/05/16 08:13

1.定义
队头(Front):允许删除的一端,又称为队首。
队尾(Rear):允许插入的一段。
空队列:不含任何元素的空表。

2.存储结构
(1)顺序存储
初始状态(队空条件):Q.rear==Q.front==0
进队操作:队不满时,先先送值到队尾元素,再将队尾指针加1。
出队操作:队不空时,先取队头元素,再将对头指针加1。

(2)循环队列
初始时:Q.front==Q.rear=0
(出队)队首指针进1:Q.front=(Q.front+1)%MaxSize
(进队)队尾指针进1:Q.rear=(Q.rear+1)%MaxSize
队列长度:(Q.rear+Maxsize-Q.front)%Maxsize
备注:带有牺牲一个单元来区分队空和队满,入队时少用一个队列单元,以“队头指针在队尾指针的下一位置作为队满的标志”
队满标志:(Q.rear+1)%Maxsize==Q.front
队空标志:Q.front == Q.rear
队列中的元素个数:(Q.rear+Maxsize-Q.front)%Maxsize

(3)队列的链式存储
实际上是一个同时带有队头指针和队尾指针的单链表。
当Q.front == NULL 且 Q.rear == NULL时,链式队列为空。

(4)双端队列
双端队列是指允许两端都可以进行入队和出队操作的队列。
输入受限的双端队列:允许在一端进行插入和删除,但是在另一端只允许删除的双端队列。
输入受限的双端队列:允许在一端进行插入和删除,但是在另一端只允许插入的双端队列。
(5)队列的应用
1.层次遍历
过程描述:

  • 根节点入队
  • 若队空(所有节点已处理完毕),则结束遍历,否则重复步骤3
  • 队列中的第一个节点出队,并访问它。若有做孩子,则将左孩子入队,若有右孩子,则将右孩子入队,返回步骤2
原创粉丝点击