1鲸郊、問(wèn)題
設(shè)計(jì)你的循環(huán)隊(duì)列實(shí)現(xiàn)榨汤。 循環(huán)隊(duì)列是一種線性數(shù)據(jù)結(jié)構(gòu)惶楼,其操作表現(xiàn)基于 FIFO(先進(jìn)先出)原則并且隊(duì)尾被連接在隊(duì)首之后以形成一個(gè)循環(huán)屁魏。它也被稱為“環(huán)形緩沖器”滔以。
循環(huán)隊(duì)列的一個(gè)好處是我們可以利用這個(gè)隊(duì)列之前用過(guò)的空間。在一個(gè)普通隊(duì)列里氓拼,一旦一個(gè)隊(duì)列滿了你画,我們就不能插入下一個(gè)元素抵碟,即使在隊(duì)列前面仍有空間。但是使用循環(huán)隊(duì)列坏匪,我們能使用這些空間去存儲(chǔ)新的值拟逮。
你的實(shí)現(xiàn)應(yīng)該支持如下操作:
MyCircularQueue(k): 構(gòu)造器,設(shè)置隊(duì)列長(zhǎng)度為 k 适滓。
Front: 從隊(duì)首獲取元素敦迄。如果隊(duì)列為空,返回 -1 凭迹。
Rear: 獲取隊(duì)尾元素罚屋。如果隊(duì)列為空,返回 -1 嗅绸。
enQueue(value): 向循環(huán)隊(duì)列插入一個(gè)元素脾猛。如果成功插入則返回真。
deQueue(): 從循環(huán)隊(duì)列中刪除一個(gè)元素鱼鸠。如果成功刪除則返回真猛拴。
isEmpty(): 檢查循環(huán)隊(duì)列是否為空。
isFull(): 檢查循環(huán)隊(duì)列是否已滿瞧柔。
2漆弄、示例
MyCircularQueue circularQueue = new MyCircularQueue(3); // 設(shè)置長(zhǎng)度為 3
circularQueue.enQueue(1);? // 返回 true
circularQueue.enQueue(2);? // 返回 true
circularQueue.enQueue(3);? // 返回 true
circularQueue.enQueue(4);? // 返回 false,隊(duì)列已滿
circularQueue.Rear();? // 返回 3
circularQueue.isFull();? // 返回 true
circularQueue.deQueue();? // 返回 true
circularQueue.enQueue(4);? // 返回 true
circularQueue.Rear();? // 返回 4
3造锅、理解題意
? ? ? ? 題意:利用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的一下方法
4撼唾、具體步驟
(1)數(shù)組構(gòu)建循環(huán)隊(duì)列需要哪些元素?數(shù)組queue哥蔚、頭指針front倒谷、尾指針rear、capacity隊(duì)列最大容量糙箍、size隊(duì)列中當(dāng)前元素?cái)?shù)量
(2)判斷隊(duì)列是否為空渤愁,直接判斷當(dāng)前元素size是否為0
(3)判斷隊(duì)是否滿,直接判斷當(dāng)前元素?cái)?shù)size是否和隊(duì)列的最大長(zhǎng)度相同
(4)插入:
? ? ? ? 1)判斷隊(duì)滿深夯,滿則返回抖格。
? ? ? ? 2)判斷隊(duì)空?空咕晋,頭指針前移:非空雹拄,尾指針前移,插入掌呜,當(dāng)前元素?cái)?shù)+1
(5)刪除
? ? ? ? 1)判空滓玖?空,返回:非空(最后一個(gè)元素质蕉?是势篡,重置頭翩肌、尾指針:否,頭指針前移禁悠,當(dāng)前元素-1)
(6)從隊(duì)首獲取元素
? ? ? ? 1)判空念祭?空,返回-1:非空绷蹲,返回頭指針指向的元素
(7)從隊(duì)尾獲取元素
? ? ? ? 1)空棒卷?空顾孽,返回-1:非空祝钢,返回尾指針指向的元素