首页 > 其他 > 详细

数据结构基础(5)--队列和循环队列详解--静态方式

时间:2015-06-23 00:59:06      阅读:203      评论:0      收藏:0      [点我收藏+]

队列的具体应用:

 所有和事件有关的操作都有队列的影子。

(例如操作系统认为先进来的先处理)


定义:

            一种可是实现“先进先出”的存储结构

分类:

   链式队列:用链表实现

           

 

 技术分享


            静态队列:用数组实现

                静态队列通常都必须是循环队列,为了减少

                内存浪费。

技术分享




循环队列 :

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

 如果用传统意义的数组实现队列,无论入队还是出队,rear和front指针只能+不能-;

比 F元素下标小的的数组元素下标就浪费了。

 循环队列怎么用呢?

技术分享

当出现这种情况时,如果仍然需要插入元素,那么f指向下一个位置,即5,r指向下一个位置即0.如图:

技术分享

那么,我们在插入一个元素“国”,然后再删除中呢?

技术分享

这就是所谓的循环队列。

2、    循环队列需要几个参数来确定 及其含义

                        需要2个参数来确定

                            front

                             

                            rear

 

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

 

2个参数不同场合不同的含义?   

建议初学者先记住,然后慢慢体会

   

1)队列初始化

front和rear的值都是零,初始化时队列就是空的。

2)队列非空

front代表队列的第一个元素

rear代表了最后一个有效元素的下一个元素

3)队列空

front和rear的值相等,但是不一定是零

4、    循环队列入队伪算法讲解

需要判断r是否指向数组最后一个元素。

两步完成:

1)将值存入r所代表的位置

2)将r后移,正确写法是rear = (rear+1)%数组长度

错误写法:rear=rear+1;

 

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

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

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

   如果front与rear的值相等,

   则队列一定为空

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

技术分享


上图这种情况,如果再插入f,r指向同一个元素。如果这样的话就不能判断队列是空还是满。

所以为了判断循环队列是否已满,有一下两种方式:

1、多增加一个表标识的参数

2、少用一个队列中的元素(才一个,不影响的)

如果r和f紧挨着(r的下一个位置是f),则队列已满

用C语言描述:

If((r+1)%数组长度)==f

  队列已满

Else

  队列不满

数据结构基础(5)--队列和循环队列详解--静态方式

原文:http://blog.csdn.net/davidluo001/article/details/46596553

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!