設計你的迴圈佇列實現。 迴圈佇列是一種線性資料結構,其操作表現基於 fifo(先進先出)原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為「環形緩衝器」。
迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是使用迴圈佇列,我們能使用這些空間去儲存新的值。
你的實現應該支援如下操作
mycircularqueue(k): 構造器,設定佇列長度為 k 。
front: 從隊首獲取元素。如果隊列為空,返回 -1 。
rear: 獲取隊尾元素。如果隊列為空,返回 -1 。
enqueue(value): 向迴圈佇列插入乙個元素。如果成功插入則返回真。
dequeue(): 從迴圈佇列中刪除乙個元素。如果成功刪除則返回真。
isempty(): 檢查迴圈佇列是否為空。
isfull(): 檢查迴圈佇列是否已滿。
示例:
mycircularqueue circularqueue = new mycircularqueue(3); // 設定長度為 3circularqueue.enqueue(1); // 返回 true
circularqueue.enqueue(2); // 返回 true
circularqueue.enqueue(3); // 返回 true
circularqueue.enqueue(4); // 返回 false,佇列已滿
circularqueue.rear(); // 返回 3
circularqueue.isfull(); // 返回 true
circularqueue.dequeue(); // 返回 true
circularqueue.enqueue(4); // 返回 true
circularqueue.rear(); // 返回 4
class mycircularqueue
/** insert an element into the circular queue. return true if the operation is successful. */
public boolean enqueue(int value)
count[tail] = value;
tail = (tail + 1)%length;
return true;
}/** delete an element from the circular queue. return true if the operation is successful. */
public boolean dequeue()
head = (head + 1)%length;
return true;
}/** get the front item from the queue. */
public int front()
return count[head];
}/** get the last item from the queue. */
public int rear()
return count[(tail-1+length)%length];
}/** checks whether the circular queue is empty or not. */
public boolean isempty()
/** checks whether the circular queue is full or not. */
public boolean isfull()
}
一道基礎題,考察佇列的理解和迴圈概念。 資料結構學習之路之迴圈佇列
佇列是一種先進先出的線性表,他只允許在表的一端進行插入元素,在另一端刪除元素。typedef struct sqqueuesqqueue 空隊 q.front q.rear 入隊 q.base rear x 出隊 x q.base front 存在的問題 設陣列的大小為m front 0 rear ...
資料結構學習 佇列
定義 佇列 queue 是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出的 first in first out 的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為隊頭。佇列不允許在中間部位進行操作!假設佇列是q a1,a2,an 那麼a1就是隊頭元素,而a...
資料結構學習 1
傳統中,資料結構一般分為 邏輯結構 和 物理結構 邏輯結構 是指資料物件中資料元素的相互關係 物理結構 是指資料的邏輯結構在計算機中的儲存形式 集合結構 集合機構中的資料元素除了同屬於乙個集合外,並沒有別的關係 線性結構 線性結構中的資料元素之間是屬於一對一的關係 樹形結構 樹形結構中的資料元素存在...