zoukankan      html  css  js  c++  java
  • 队列

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

                   定义:

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

                   分类

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

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

                   应用:

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

                   循环队列的讲解

                      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

               未满

     

     

     

     

     

     

     

  • 相关阅读:
    2017年8月27日 星期日 --出埃及记 Exodus 29:6
    2017年8月26日 星期六 --出埃及记 Exodus 29:5
    2017年8月25日 星期五 --出埃及记 Exodus 29:4
    2017年8月24日 星期四 --出埃及记 Exodus 29:3
    2017年8月23日 星期三 --出埃及记 Exodus 29:2
    2017年8月22日 星期二 --出埃及记 Exodus 29:1
    2016年12月总结
    2016年11月总结
    2016年10月总结
    项目风险说明
  • 原文地址:https://www.cnblogs.com/jiefangzhe/p/10873759.html
Copyright © 2011-2022 走看看