从0开始学习数据结构-队列的学习①

162 阅读2分钟

这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

队列的概念及其操作

队列的定义

队列(queue),简称为队,是一种只允许在表的一端进行插入操作,而在表的另一端进行删除操作的线性表。

  • 队尾:允许进行插入的一端,定义变量rear
  • 对头:允许删除的一端,定义变量front
  • 空队:没有元素的队列
  • 进队:队列的插入操作
  • 出队:队列的删除操作

元素进入队列或者退出队列是按照“先进先出(First In First Out,FIFO)”的原则进行的。因此,队列也称为先进先出表。队列和堆栈一样,也是一个动态结构。

队列的基本操作

  • ① 初始化一个队列
  • ② 进队或者入队:在队列的尾部插入一个新的元素。该操作改变队尾指针的位置
  • ③ 出队或者退队:删除队列的队头元素。该操作改变队尾指针的位置
  • ④ 判断队列是否为空。当队列为空时返回真,否则返回假。在队列的删除操作之前必须进行的一个操作
  • ⑤ 判断队列是否已满。当队列已满时返回真,否则返回假。在队列采用顺序存储结构时,插入操作之前必须进行的一个操作
  • ⑥ 获取当前对头元素。此操作与第③个操作不同,后者会修改队头元素指针的位置,而本操作则不会修改队头元素指针的位置。

队列的顺序存储结构

顺序队列的构造

采用顺序存储结构的队列简称为顺序队列。

  • 定义一维数组QUEUE[0, ..., M-1]来存放队列的元素
  • 设置两个整型变量front和rear,front:队头元素,rear:队尾元素
    • 队头指针front:指出实际队头元素所在位置的前一个位置。
    • 队尾指针rear:指出实际队尾元素所在的位置。

image.png

队列的顺序存储结构类型的描述:

#define M 1000; // 定义队列的最大容量
QElemType QUEUE[M];
int front, rear;
  • 初始时,队列为空,有front=rear=-1.
  • 判断队列是否为空的条件为front=rear
  • 顺序队列也存在溢出问题,即当队列已满时做进队操作,这种称为上溢。当队列为空时做删除操作,这种称为下溢。

image.png