| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1596 人关注过本帖, 1 人收藏
标题:循环队列问题
只看楼主 加入收藏
gaoxiaoyijia
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2009-5-13
结帖率:100%
收藏(1)
 问题点数:0 回复次数:2 
循环队列问题
循环队列长度的计算公式 Length=(rear - front + Maxsize) % Maxsize 中为什么要进行取余计算
rear是尾指针front是头指针,Maxsize为存储空间长度


搜索更多相关主题的帖子: 队列 
2010-04-09 23:36
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
循环队列中 当对头出队列 队尾进队列 存在front的值大于rear的情况
此时rear-front 的值就为负的  而加上Maxsize后 就刚好补过来
   假设1:Maxsize=5     rear=0, front=4,  rear是指向队尾的下一个单元 也就是现在的rear指的单元没有存放数据因为front=4,若是front=0 就不是这种情况。 此时的队列长度1 ,如果不采用
       Length=(rear - front + Maxsize) % Maxsize的方法  得到错误的结果是 rear-front = -4 而采用刚才的算法就真好是 1。
   假设2:Maxsize=5   rear=3, front=0, 此时的对长是3,  Length=(rear - front + Maxsize) % Maxsize算的的结果也是3。相当 Length = rear - front + 0


    所以, 之所以在rear-front后面加上Maxsize是为了避免假设1 当中的情况产生, 而,后面取余 是为了在避免假设1:的基础上去避免假设2:的产生。 综合来说,单存在假设1 可以不要取余,单存在假设2 在计算队长的时候可以什么都不要,只要rear-front 即可。
              
2010-04-10 08:24
LegendofMine
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-04-28 12:29
快速回复:循环队列问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016245 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved