数据结构基础第4讲

数据结构基础第4讲 队列

内容

img

考点一: 队列概念

代码不考

1.队列的定义

img

img

考点二:顺序队列的定义

img

考点三顺序队列的性质与操作

4要素:

img

考点四:循环队列的定义

由于顺序队列会存在假溢出问题,引入循环队列。

假溢出:

img

描述:

img

考点五:循环队列的操作

  1. 判断空满:

    img

  2. 性质:
    考频75%
    img

    元素个数求法:

    1. rear < front

      img

      f-r 为空的个数

      元素个数为:

      \([n-(f-r)] \% n = (r-f+n) \% n\)

    2. rear > front

      img

      \(r-f\) 为元素个数

      元素个数为:

      \((r-f)\%n\)

    为了形式统一将情况二写成:

    \(\begin{matrix} (r-f)\%n &=(r-f) \%n + n \%n \\ &=(r-f+n)\%n \end{matrix}\)

  3. 环形队列实现的三种方式

    1. 队首指针始终指向队头元素,队尾指针始终指向队尾元素的下一个位置

      img

      img

    2. 队首指针始终指向队头元素的前一个位置,队尾指针始终指向队尾元素

      img

      img

    3. 队首指针始终指向队头元素,队尾指针始终指向队尾元素[需要加入len表示元素个数]

      img

      • 初始化 f=0;rear = MaxSize-1

      img

      空 ;\((r+1)\%==front\)

      满:\((r+1)\%MaxSize\)

    例题4:

    img

    例题5:

    img

    img

    属于第二种情况

    • 元素个数:\(len=(rear-front+QueueSize)\%QueueSize\)
    • 由于
    • \[len=QueueSize-1<QueueSize \]

    • 所以
    • \[len\%QueueSize=len \]

    • 将上式子带入元素个数得
    • \[\begin{align} len\%QS &= (r-f+QS)\%QS \\ &= r\%QS-f\%QS+QS\%QS \end{align} \]

    • \[\begin{align}f\%QS&=f\\&=(r-len+QS)\%QS\end{align} \]

若题目未明确是第几种,按第一或第二考虑

考点七:链队列的定义

img

  1. 入队出队:

img

  1. 链队的4要素:

img

  1. 实现队列的方式

    • 分别给出头尾指针 最佳方案
    • 单链表:带尾指针的单循环链表
    • 双链表:给头指针或尾指针的双循环链表

考点八:链队列的操作

  1. 初始化

    img

  2. 销毁

    img

  3. 判空

    img

  4. 进队

    考虑情况:

    • 原队列为空
    • 原队列非空

    img

  5. 出队

    考虑情况:

    • 原队列为空
    • 原队列只有一格节点
    • 其他情况

    img

    \(\divideontimes\)不管啥题就选 队首/队尾均可以

考点九:双端队列

输出受限:

img

输入受限:

img

posted @ 2024-04-23 22:44  蠲忿恚葉言  阅读(34)  评论(0)    收藏  举报