【資料結構·考研】迴圈雙端佇列
阿新 • • 發佈:2021-01-10
技術標籤:考研程式設計-線性表資料結構佇列c++
設計迴圈雙端佇列
設計實現雙端佇列。
你的實現需要支援以下操作:MyCircularDeque(k):建構函式,雙端佇列的大小為k。
insertFront():將一個元素新增到雙端佇列頭部。 如果操作成功返回 true。
insertLast():將一個元素新增到雙端佇列尾部。如果操作成功返回 true。
deleteFront():從雙端佇列頭部刪除一個元素。 如果操作成功返回 true。
deleteLast():從雙端佇列尾部刪除一個元素。如果操作成功返回 true。
getFront():從雙端佇列頭部獲得一個元素。如果雙端佇列為空,返回 -1。getRear():獲得雙端佇列的最後一個元素。如果雙端佇列為空,返回 -1。
isEmpty():檢查雙端佇列是否為空。
isFull():檢查雙端佇列是否滿了。來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/design-circular-deque
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
與迴圈佇列實現思路完全相同,注意區分先移位置再放元素還是先放元素再移位置。
class MyCircularDeque { public: int front; int rear; int maxSize = 0; int size; vector<int> arr; /** Initialize your data structure here. Set the size of the deque to be k. */ MyCircularDeque(int k) { arr = vector<int>(k); front = 0; rear = 0; maxSize = k; size = 0; } /** Adds an item at the front of Deque. Return true if the operation is successful. */ bool insertFront(int value) { if(isFull()) return false; front = (front-1+maxSize)%maxSize; arr[front] = value; size ++; return true; } /** Adds an item at the rear of Deque. Return true if the operation is successful. */ bool insertLast(int value) { if(isFull()) return false; arr[rear] = value; rear = (rear+1)%maxSize; size ++; return true; } /** Deletes an item from the front of Deque. Return true if the operation is successful. */ bool deleteFront() { if(isEmpty()) return false; front=(front+1)%maxSize; size --; return true; } /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ bool deleteLast() { if(isEmpty()) return false; rear=(rear-1+maxSize)%maxSize; size --; return true; } /** Get the front item from the deque. */ int getFront() { if (isEmpty()) return -1; else return arr[front]; } /** Get the last item from the deque. */ int getRear() { if(isEmpty()) return -1; else return arr[(rear+maxSize-1)%maxSize]; } /** Checks whether the circular deque is empty or not. */ bool isEmpty() { return front == rear && size == 0; } /** Checks whether the circular deque is full or not. */ bool isFull() { return front == rear && size == maxSize; } };
執行結果: