快穿之炮灰逆袭记txt:请教一道关于循环队列的数据结构题

来源:百度文库 编辑:高考问答 时间:2024/04/29 23:42:14
是04年的软件设计师考试题:
若循环队列以数组Q[0,...,m-1]作为其存储结构,变量rear表示循环队列中队尾元素的实际位置,其移动按rear=(rear+1) mod m进行,变量length表示当前循环队列中的元素个数,则循环队列的队首元素的实际位置是:
答案为(1+rear+m-length) mod m

我不明白是怎么计算出来的,请高手讲讲。
或者留下QQ~~

可以想象把对尾指针移动到队首需要走多远?
队尾指针想移动到队首,首先需要rear - length + 1。

例如,队伍中有3个元素,队尾指针指向第3个元素,想移动到队首,要向前移动2次就能到达第一个元素。(rear-3+1)

不过,因为rear的值不定(在0与m之间),所以rear-3+1就有可能小于0!也就是说数组的下标小于0,这是不行的。例如数组有12格时候,下标等于-2,那么它本来应该是10。就像钟表,-2点就是10点。算法是(-2+12) mod 12。6点还是6点,算法(6+12) mod 12。
所以把结果加一个m再mod m(其实加几个m都是可以的)
即rear + m + 1 - length。