作者:手机用户2602909197 | 来源:互联网 | 2023-09-12 11:10
假如,我们在设计一个循环队列,预先分配一段内存空间使其容量为capacity。当队尾指针(可用一个指示序号的整型变量实现,其永远指向最后一个元素的下一个位置)指向物理空间上的最后一
假如, 我们在设计一个循环队列,预先分配一段内存空间使其容量为capacity。当队尾指针(可用一个指示序号的整型变量实现,其永远指向最后一个元素的下一个位置)指向物理空间上的最后一个存储单元时,此时再插入元素,因为队列可能并未真满,可使尾指针返回来指向物理存储空间中的第一个单元。
此时,我们可能需要一个判断:
if( ++Q.rear >
Q.capacity )
Q.rear = 0;
问题来了!当该队列频繁入队时(甚至我们可以推测出队时也需要同样的判断)或频繁出队时,大规模的判断会让效率很低,怎么办呢?
此时,我们可以用取模运算:
Q.rear = ( Q.rear + 1 ) % Q.capacity;
因为取模运算是通过硬件实现的,故效率得到了很可观的提高。
同理,对队列长度的计算也可用
Q.length = ( Q.rear - Q.front + Q.capacity ) % Q.capacity;
来代替对头尾指针位置先后的判断。