热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

编程技术感想——用取模运算代替判断后得到的高效性

假如,我们在设计一个循环队列,预先分配一段内存空间使其容量为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;

来代替对头尾指针位置先后的判断。

 


推荐阅读
author-avatar
手机用户2602909197
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有