題目連結:
題目意譯:
設計你自己的環形雙端佇列(Deque)之實作。
你的實作應支援以下操作:
MyCircularDeque(k): 建構子,設定 deque 的大小為 k。
insertFront(): 添加一個元素到 deque 的前端。回傳真,如果操作成功的話。
insertLast(): 添加一個元素到 deque 的尾端。回傳真,如果操作成功的話。
deleteFront(): 刪除 deque 前端的元素。回傳真,如果操作成功的話。
deleteLast(): 刪除 deque 尾端的元素。回傳真,如果操作成功的話。
getFront(): 取得 deque 前端的元素。如果 deque 為空,則回傳 -1。
getRear(): 取得 deque 尾端的元素。如果 deque 為空,則回傳 -1。
isEmpty(): 檢查 deque 是否為空。
isFull(): 檢查 deque 是否滿了。
注:
所有值將介於範圍 [0, 1000] 中。
操作數將介於範圍 [1, 1000] 中。
請勿使用內建的 Deque 函式庫。
範例測資:
MyCircularDeque circularDeque = new MycircularDeque(3); // 設定大小為 3
circularDeque.insertLast(1);// 回傳真
circularDeque.insertLast(2);// 回傳真
circularDeque.insertFront(3);// 回傳真
circularDeque.insertFront(4);// 回傳假,佇列已滿
circularDeque.getRear(); // 回傳 2
circularDeque.isFull();// 回傳真
circularDeque.deleteLast();// 回傳真
circularDeque.insertFront(4);// 回傳真
circularDeque.getFront();// 回傳 4
解題思維:
可以視為
這題的延伸。不過該題的 Front() 、 Rear() 、 enQueue() 和 deQueue() 依序對應到本題的 getFront() 、 getRear() 、 insertLast() 以及 deleteFront()。
而 insertFront() 和 deleteLast() 可以仿照 insertLast() 跟 deleteFront() 的作法。至於其他的函式基本就是一樣。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。