数据结构 循环队列的下标问题

飘逸的虚空 2012-05-10 09:03:32
怎么把循环队列的数组下标设置从1~n,而不是0~n-1,如 有5个数 1 2 3 4 5 他们的下标也是1~5,这时就出现问题了,循环队列是首尾相连,(5+1)%5 是等于 1 ,实现了第一个和最后一个数的循环,但(4+1)%5 却等于 0,这下问题来了。要怎么才能避免呢,还有如果要把下标设成a~b呢? 这是我们辅导班老师留的题目,说用点数学知识就可以解决了?求高手解决
...全文
390 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
RiqueZhang 2012-05-21
  • 打赏
  • 举报
回复
你把问题想复杂了吧?3楼和7楼才是正解!!!

[Quote=引用 5 楼 的回复:]

我总结了一下,希望有用!

当index=0,1,...,length-1时,假设length>1
(index+1)%length=1,2,...,length-1,0

当index=1,2,...,length时,假设length>2
1)(index+1)%length
=2,...,length-1,0,1
2)index+1>length?(index+1)%leng……
[/Quote]
就叫我海 2012-05-15
  • 打赏
  • 举报
回复
以前从0~n-1
当前索引是tIndex, 增量是tOffset, 数组总长是tLength
按0~n-1这个..
就是
(ptIndex+toffset)%tLength
换为1-n,长度不变,下标比以前多1

(ptIndex+toffset) 
ptIndex 就相当于 tIndex - 1

用现在下标表示就是(tIndex + toffset - 1)

取模处理后可以得到以前的(0~n-1),之后再加个1,就是现在的表示
(tIndex + toffset - 1)%tLength + 1
飘逸的虚空 2012-05-15
  • 打赏
  • 举报
回复
受益匪浅,谢谢了哈- -[Quote=引用 5 楼 的回复:]
我总结了一下,希望有用!

当index=0,1,...,length-1时,假设length>1
(index+1)%length=1,2,...,length-1,0

当index=1,2,...,length时,假设length>2
1)(index+1)%length
=2,...,length-1,0,1
2)index+1>length?(index+1)%lengt……
[/Quote]
采石工 2012-05-15
  • 打赏
  • 举报
回复
我总结了一下,希望有用!

当index=0,1,...,length-1时,假设length>1
(index+1)%length=1,2,...,length-1,0

当index=1,2,...,length时,假设length>2
1)(index+1)%length
=2,...,length-1,0,1
2)index+1>length?(index+1)%length:index+1
=2,...,length,1
3)index%length+1
=2,...,length,1

当index=1,2,...,length时,假设length=2
1)(index+1)%length
=0,1
2)index+1>length?(index+1)%length:index+1
=2,1
3)index%length+1
=2,1

当index=0,1,...,length-1时,假设offset<length
(index+offset)%length的值可以为0,1,...,length-1

当index=1,2,...,length时,假设offset<length
1)(index+offset)%length
的值可以为0,1,...,length-1
2)index+offset>length?(index+offset)%length:index+offset
的值可以为1,2,...,length
3)(index+offset-1)%length+1
的值可以为1,2,...,length
采石工 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

呵呵、、这个可以、谢了、 不过(i+1-maxsize)%maxsize 这样会更好么 我想了下
[/Quote]

你的方法是不行的,因为a%b的结果的符号与a相同,而i+1-maxsize不总是正的。
而且当a为正整数时,a%b的值域为[0,b)内的整数,所以(i+1-maxsize)%maxsize的结果不包含maxsize。
一楼和三楼的方法都可以。
RiqueZhang 2012-05-14
  • 打赏
  • 举报
回复
当前索引是tIndex, 增量是tOffset, 数组总长是tLength
则结果是(tIndex+tOffset-1)%tLength+1
飘逸的虚空 2012-05-12
  • 打赏
  • 举报
回复
呵呵、、这个可以、谢了、 不过(i+1-maxsize)%maxsize 这样会更好么 我想了下
libralibra 2012-05-10
  • 打赏
  • 举报
回复
这个直接判断就行了,加入长度是len
当前是ind,增量式offset

newind = (ind+offset)>len ? (ind+offset)%len : ind+offset;


这样,ind=4,offset=1,len=5时,4+1=5<=5,所以不用求余

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧