数据结构 循环队列的下标问题
怎么把循环队列的数组下标设置从1~n,而不是0~n-1,如 有5个数 1 2 3 4 5 他们的下标也是1~5,这时就出现问题了,循环队列是首尾相连,(5+1)%5 是等于 1 ,实现了第一个和最后一个数的循环,但(4+1)%5 却等于 0,这下问题来了。要怎么才能避免呢,还有如果要把下标设成a~b呢? 这是我们辅导班老师留的题目,说用点数学知识就可以解决了?求高手解决
[解决办法]
当前索引是tIndex, 增量是tOffset, 数组总长是tLength
则结果是(tIndex+tOffset-1)%tLength+1
[解决办法]
我总结了一下,希望有用!
当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