期末复习——队列的概念及应用

队列的概念

队列:限定所有的插入操作在表的一端进行,而删除操作在表的另一端进行线性表

允许进行插入操作的一端称为队尾(rear),允许进行删除操作的一端称为队头(front)。

特点:先进先出
在这里插入图片描述

队列的基本操作

  1. 队列初始化:InitQueue(q)
    初始化一个空队;
  2. 入队操作:InQueue(q,x)
    对已存在的队列q,插入一个元素×到队尾。操作成功,返回值为TRUE,否则返回值为FALSE;
  3. 出队操作:OutQueue(q,x)
    删除队首元素,并返回其值。操作成功,返回值为TRUE;
  4. 读队头元素:FrontQueue(q,x)
    读队头元素,并返回其值,队不变。操作成功,返回值为TRUE,否则返回值为FALSE。
  5. 判队空操作:EmptyQueue(q)
    若q为空队则返回为1,否则返回为0。

顺序结构

用一个一维数组来实现。
一开始队头和队尾都指向最下面,队列为空,队头队尾指针为-1,;一个元素入队,尾指针+1,
在这里插入图片描述
队头指针指示队列中队头元素的前面一个位;
队尾指针指示队列中队尾元素位置。

头指针+1,A出队
在这里插入图片描述
在这里插入图片描述

循环结构(常用)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如何判断循环队列的队空和队满?

  • 少用一个存储单元
    队空条件:rear = front
    队满条件:(rear+1)% maxsize = front
  • 设置一个标志
    队空条件:rear=front && tag=0
    队满条件:rear=front && tag=1
  • 设置一个计数器
    队空条件:count=0
    队满条件:count=maxsize

循环队列需要事先给队列分配一个比较大的存储空间

链队列

链表来实现线性表的存储。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ITmincherry/article/details/106709089