队列

        线性结构的应用------队列

               定义:

                     一种可以实现先进先出的存储结构

               分类

                     链式队列: -----用链表实现(比较简单)

                     静态队列: -----用数组实现  静态队列通常都必须是循环队列

               应用:

                     所有和时间有关的事件都有队列的影子

               循环队列的讲解

                  1)静态队列为什么必须是循环队列

       

  

             现在如果一个数组里面存了四个元素,那么front就只想第一个有效元素,而real指向最后一个元素的下一个元素,当增加元素时,只能在rear一端增加,即rear向上移。删除元素时,只能在front一端删除元素,即front向上移。但是如果一直增增删删,那么就会造成rear端溢出,而front端浪费,所以对于这种情况,可以采用循环队列的形式,即当rear已经指向数组最后一个元素时,那么就可以转而将rear指向数组的第一个空出来的空间。

           2)循环队列需要几个参数来确定

                    需要2个参数来确定:front rear                          

           3)循环队列各个参数的含义:

                    2个参数在不同场合有不同的含义

      • 队列初始化

frontrear的值都为零

      • 队列非空

front代表的是队列的第一个元素

rear代表的是队列的最后一个有效元素的下一个元素

      • 队列为空

frontreal的值相等,但不一定为零

           4)循环队列入队伪算法讲解:

                  两步完成:

      • 将值存入rear所代表的位置
      • 错误的写法 rear = rear+1;

正确的写法是:rear =  (rear+1)%数组的长度

           5)循环队列出队伪算法讲解

                        Front =front +1%数组的长度

(6) 如何判断循环队列是否为空

          如果frontrear的值相等,则该队列就一定为空

7)如何判断循环队列是否已满

       因为front的值可能比rear大,也可能比他小,也可能相等

    所以有两种方式:

  • 多增加一个标识是否满的参数
  • 少用一个元素【通常用此种方式】

 如果frontrear的值相差1,且front>rear,则证明队列已满。

      C语言伪算法表示为:

        if ((rear+1)%数组长度==front)

           已满

        else

           未满

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/jiefangzhe/p/10873759.html