leetcode622 設計迴圈佇列

2022-08-27 19:51:11 字數 3168 閱讀 8798

設計你的迴圈佇列實現。 迴圈佇列是一種線性資料結構,其操作表現基於 fifo(先進先出)原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為「環形緩衝器」。

迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是使用迴圈佇列,我們能使用這些空間去儲存新的值。

你的實現應該支援如下操作:

mycircularqueue(k): 構造器,設定佇列長度為 k 。

front: 從隊首獲取元素。如果隊列為空,返回 -1 。

rear: 獲取隊尾元素。如果隊列為空,返回 -1 。

enqueue(value): 向迴圈佇列插入乙個元素。如果成功插入則返回真。

dequeue(): 從迴圈佇列中刪除乙個元素。如果成功刪除則返回真。

isempty(): 檢查迴圈佇列是否為空。

isfull(): 檢查迴圈佇列是否已滿

一)迴圈佇列

設計乙個迴圈對列,重點在於在各項操作中維持資料不變式,即維持物件屬性之間的正確關係。

(1)建構函式中定義四個屬性:

self._len:佇列長度

self._elems:用於記錄迴圈佇列元素的列表

self._head:佇列中第乙個元素的下標

self._num:佇列中的元素個數

(2)進佇列

在佇列尾部加入元素,並是self._num加1,以維持物件屬性之間的正確關係。

(3)出佇列

只是對列中第乙個元素下標的指標後移1,同時將self._num減1。

其餘操作容易理解,可參看以下**。

(4)獲取佇列首元素

若隊列為空,即self._num等於0,返回-1;否則,返回索引self._head中的元素

(5)獲取佇列尾端元素

若對列為空,返回-1;否則,返回索引(self._head + self._num - 1) % self._len中元素,之所以要進行取模操作,是因為該隊列為迴圈對列,儲存佇列元素的列表最後乙個位置的下乙個位置為其首位置

(6)隊列為空

self._num為0

(7)隊列為滿

self._num等於self._len

class

mycircularqueue

/** insert an element into the circular queue. return true if the operation is successful.

*/bool enqueue(int

value)

return

false

; }

/** delete an element from the circular queue. return true if the operation is successful.

*/bool

dequeue()

}/** get the front item from the queue.

*/int

front()

/** get the last item from the queue.

*/int

rear()

}/** checks whether the circular queue is empty or not.

*/bool

isempty()

/** checks whether the circular queue is full or not.

*/bool

isfull()

};

以下官方解法,感覺不好理解………………

class

mycircularqueue

/** insert an element into the circular queue. return true if the operation is successful.

*/bool enqueue(int

value)

if(isempty())

tail = (tail + 1) %size;

data[tail] =value;

return

true

; }

/** delete an element from the circular queue. return true if the operation is successful.

*/bool

dequeue()

if (head ==tail)

head = (head + 1) %size;

return

true

; }

/** get the front item from the queue.

*/int

front()

return

data[head];

}/** get the last item from the queue.

*/int

rear()

return

data[tail];

}/** checks whether the circular queue is empty or not.

*/bool

isempty()

/** checks whether the circular queue is full or not.

*/bool

isfull()

};/*

* * your mycircularqueue object will be instantiated and called as such:

* mycircularqueue obj = new mycircularqueue(k);

* bool param_1 = obj.enqueue(value);

* bool param_2 = obj.dequeue();

* int param_3 = obj.front();

* int param_4 = obj.rear();

* bool param_5 = obj.isempty();

* bool param_6 = obj.isfull();

*/

LeetCode 622 設計迴圈佇列

設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是...

Leetcode 622 設計迴圈佇列

設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是...

leetcode 622 設計迴圈佇列

題目鏈結 設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有...