#ZSCSP12. [笔记][CSP][程序设计基本知识]3-1-2.队列

[笔记][CSP][程序设计基本知识]3-1-2.队列

  • 队列(Queue):只允许在表的前端(队头front/head)删除,在表的后端(队尾rear/tail)进行插入


  • 性质:先进先出(First In First Out,简称FIFO)


  • 基本操作:入队(push)、出队(pop)、查询栈顶元素(top)、判断空栈(empty

  • 存储结构顺序存储,队头指针front(指向队头元素),队尾指针rear(指向待插入的位置)

    • 元素入队:则rear + 1

    • 元素出队:则front + 1


    • 单向队列:存储空间无法循环使用存储效率低

      • front == rear时,表明队空
      • front - rear == n时,表明队满
      • 当前队内元素个数front - rear

    • 循环队列:存储空间可以循环使用存储效率高;不过需要一些辅助手段

      • 根据图示循环队列,发现单向队列的性质不适用于循环队列,原因如下:

        • front == rear时,表明队空(×)也可能是队满,因为rear由于循环会重新指向front
        • front - rear == n时,表明队满(×)理由同上
        • 当前队内元素个数front - rear(×)由于循环的特性,无法保证front > rear
      • 为解决循环队列队满/空的判断冲突,可以牺牲front前一个存储单元不存放数据(如上图),得到新的性质如下:

        • front == rear时,表明队空
        • (rear + 1) % n == front时,表明队满
        • 当前队内元素个数(rear - front + n) % n