編程技術感想——用取模運算代替判斷後得到的高效性

 

假如, 我們在設計一個循環隊列,預先分配一段內存空間使其容量爲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;

來代替對頭尾指針位置先後的判斷。

 

發佈了17 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章