数据结构复习之队列

228 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

队列的定义

队列(Queue),简称为队, 是先进先出(FIFO)的线性表。队列只允许在后端(称为rear)进行操作,在前端(称为front)进行删除操作。

  • 是一种只允许在一端进行插入,在另一端进行删除的线性表,它是一种先进先出(FIFO)的数据结构
    • 队尾:允许进行插入的一端(用变量rear指出)
    • 队首:允许删除的一端称为队首(用变量front指出)
  • 在队列不为空时,(一般的)我们只能看到队首元素
  • 没有元素的队列称为空队

队列和堆栈一样,也是一个动态结构。

队列的结构定义

#define Max 50; // 队列当中元素的最大个数
// 队列的定义
struct Queue {
    EleType data[Max]; // 队列的数据域
    int front, rear; // 队列的队首元素位置与队尾元素位置
}

由于普通的队列在入队出队的过程中,指针指的位置可能超过数据范围上限,所以一般在实现时使用循环队列。

循环队列:当指针指向上限时将指针移动到最开始,与栈类似,也可以用链表的结构实现链式队列

顺序队列:采用顺序存储结构的队列简称顺序队列。顺序队列也存在溢出问题,即当队列已满时做进队操作,这种现象称为上溢,而当队列为空时做删除操作,这种现象称为下溢,这些都是在进行不同操作时需要考虑的问题。

队列操作

  • 入队
  • 出队
  • 获取队首元素

入队操作:

队列的入队出队.gif

出队操作:

队列的入队出队(1).gif

  • 队首指的是队首元素的位置
  • 队尾指的是队尾元素的下一个位置,为了避免二义性,不然不能判断一个循环队列道德是满的还是空的