溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

LeetCode如何實現(xiàn)循環(huán)隊列

發(fā)布時間:2021-12-15 11:18:03 來源:億速云 閱讀:165 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下LeetCode如何實現(xiàn)循環(huán)隊列,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

隊列是典型的先進(jìn)先出(FIFO)結(jié)構(gòu),插入(insert)也叫做入隊(enqueue),新元素從隊尾插入。刪除(delete)也叫做出隊(dequeue),從隊首移除

LeetCode如何實現(xiàn)循環(huán)隊列

LeetCode如何實現(xiàn)循環(huán)隊列  
 

隊列

隊列可以利用Python中的數(shù)組實現(xiàn),包含如下函數(shù):

  • enqueue:入隊

  • dequeue:出隊

  • isEmpty:判斷是否為空

  • size:隊列長度(元素個數(shù))

LeetCode如何實現(xiàn)循環(huán)隊列

LeetCode如何實現(xiàn)循環(huán)隊列  
 

循環(huán)隊列

循環(huán)隊列也是一種線性結(jié)構(gòu),同樣基于FIFO原則,只不過隊尾被連接在了隊首之后形成了一個循環(huán),也被稱之為“環(huán)形緩沖器”

循環(huán)隊列的一個優(yōu)點在于:可以利用這個隊列之前用過的空間

循環(huán)隊列是要設(shè)置總長度容量的

循環(huán)隊列包含的函數(shù):

  • MyCircularQueue(k):構(gòu)造一個長度為k的循環(huán)隊列

  • Front:獲取隊首元素

  • Rear:獲取隊尾元素

  • enqueue(value):向循環(huán)隊列插入一個元素,若成功則返回True

  • dequeue():從循環(huán)隊列中刪除一個元素,成功則返回True

  • isFull():檢查循環(huán)隊列是否為已滿

  • isEmpty():判斷循環(huán)隊列是否為空

示例:

LeetCode如何實現(xiàn)循環(huán)隊列

 

實現(xiàn)思路

LeetCode如何實現(xiàn)循環(huán)隊列

首先循環(huán)隊列是個“環(huán)”,利用python的數(shù)組模擬,通過操作數(shù)組的索引構(gòu)建一個虛擬的環(huán)。對于循環(huán)隊列而言,總長度是固定的(即數(shù)組的容量是固定的),任何位置都可以是隊列的隊首利用隊首索引可以利用如下公式推導(dǎo)出隊尾索引

tail_index = (head_index + count -1) % capacity

公式中的參數(shù):

  • tail_index:隊尾索引

  • head_index:隊首索引

  • count:隊列長度(即實際元素個數(shù))

  • capacity:數(shù)組容量

LeetCode如何實現(xiàn)循環(huán)隊列

 
 

循環(huán)隊列小結(jié)

1. 隊尾索引由隊頭索引公式得到

tail_index = (head_index + count -1) % capacity
2. 設(shè)置數(shù)組容量  capacity
3. 隊列長度  count  (實際元素個數(shù))
4.  “循環(huán)”實現(xiàn)的關(guān)鍵    % capacity
5. “插入”是隊尾移動,“刪除”是隊頭移動


以上是“LeetCode如何實現(xiàn)循環(huán)隊列”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI