廣州市政府網(wǎng)站建設(shè)概括電腦版百度
題目
設(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ì)列之前用過的空間。在一個(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ì)列是否已滿。
示例:
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
提示:
? ? 所有的值都在 0 至 1000 的范圍內(nèi);
? ? 操作數(shù)將在 1 至 1000 的范圍內(nèi);
? ? 請(qǐng)不要使用內(nèi)置的隊(duì)列庫。
代碼
class MyCircularQueue {private int[] data;private int front;private int tail;public MyCircularQueue(int k) {data = new int[k + 1];}public boolean enQueue(int value) {if(isFull()) {return false;}data[tail] = value;tail = (tail + 1) % data.length;return true;}public boolean deQueue() {if(isEmpty()) {return false;}front = (front + 1) % data.length;return true;}public int Front() {if(isEmpty()) {return -1;}return data[front];}public int Rear() {if(isEmpty()) {return -1;}int index = tail == 0 ? data.length - 1 : tail - 1;return data[index];}public boolean isEmpty() {return front == tail;}public boolean isFull() {return (tail + 1) % data.length == front;}
}/*** Your MyCircularQueue object will be instantiated and called as such:* MyCircularQueue obj = new MyCircularQueue(k);* boolean param_1 = obj.enQueue(value);* boolean param_2 = obj.deQueue();* int param_3 = obj.Front();* int param_4 = obj.Rear();* boolean param_5 = obj.isEmpty();* boolean param_6 = obj.isFull();*/