設計迴圈雙端佇列

2021-10-04 10:09:10 字數 3150 閱讀 7688

題目描述:

設計實現雙端佇列。

你的實現需要支援以下操作:

**mycirculardeque(k):**建構函式,雙端佇列的大小為k。

**insertfront():**將乙個元素新增到雙端佇列頭部。 如果操作成功返回 true。

**insertlast():**將乙個元素新增到雙端佇列尾部。如果操作成功返回 true。

**deletefront():**從雙端佇列頭部刪除乙個元素。 如果操作成功返回 true。

**deletelast():**從雙端佇列尾部刪除乙個元素。如果操作成功返回 true。

**getfront():**從雙端佇列頭部獲得乙個元素。如果雙端隊列為空,返回 -1。

**getrear():**獲得雙端佇列的最後乙個元素。 如果雙端隊列為空,返回 -1。

**isempty():**檢查雙端佇列是否為空。

**isfull():**檢查雙端佇列是否滿了。

示例

mycirculardeque circulardeque = new mycirculardeque(3); // 設定容量大小為3

circulardeque.insertlast(1); // 返回 true

circulardeque.insertlast(2); // 返回 true

circulardeque.insertfront(3); // 返回 true

circulardeque.insertfront(4); // 已經滿了,返回 false

circulardeque.getrear(); // 返回 2

circulardeque.isfull(); // 返回 true

circulardeque.deletelast(); // 返回 true

circulardeque.insertfront(4); // 返回 true

circulardeque.getfront(); // 返回 4

所有值的範圍為 [1, 1000]

操作次數的範圍為 [1, 1000]

請不要使用內建的雙端佇列庫。

思路定義乙個可以存放k+1個元素的陣列,設定兩個指標,頭指標指向第乙個元素,尾指標指向最後乙個元素的下乙個位置。

**

public class mycirculardeque 

/** adds an item at the front of deque. return true if the operation is successful. */

public bool insertfront(int value)

phead=(phead-1+maxsize)%maxsize;

set[phead]=value;

return true;

}/** adds an item at the rear of deque. return true if the operation is successful. */

public bool insertlast(int value)

set[prear]=value;

prear=(prear+1)%maxsize;

return true;

}/** deletes an item from the front of deque. return true if the operation is successful. */

public bool deletefront()

phead=(phead+1)%maxsize;

return true;

}/** deletes an item from the rear of deque. return true if the operation is successful. */

public bool deletelast()

prear=(prear-1+maxsize)%maxsize;

return true;

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

public int getfront()

return set[phead];

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

public int getrear()

return set[(prear-1+maxsize)%maxsize];

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

public bool isempty()

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

public bool isfull()

}/**

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

* mycirculardeque obj = new mycirculardeque(k);

* bool param_1 = obj.insertfront(value);

* bool param_2 = obj.insertlast(value);

* bool param_3 = obj.deletefront();

* bool param_4 = obj.deletelast();

* int param_5 = obj.getfront();

* int param_6 = obj.getrear();

* bool param_7 = obj.isempty();

* bool param_8 = obj.isfull();

*/

運**況

執行結果

總結插入刪除元素時要注意對頭、尾指標「+maxsize」防止陣列越界,頭插時頭指標要先減一再賦值,尾插時尾指標要先賦值再加一。

設計迴圈雙端佇列

眾所周知,佇列是先進先出,隊尾進,隊頭出 那麼怎麼來實現雙端迴圈佇列呢?我們知道實現迴圈佇列中比較難的地方隊尾進,隊頭出在於怎麼讓rear 1就到陣列的front 或者 出隊的時候怎麼讓front到front 我們可以這樣 rear rear 1 length或者front front 1 leng...

162 設計迴圈雙端佇列

題目描述 設計實現雙端佇列。你的實現需要支援以下操作 mycirculardeque k 建構函式,雙端佇列的大小為k。insertfront 將乙個元素新增到雙端佇列頭部。如果操作成功返回 true。insertlast 將乙個元素新增到雙端佇列尾部。如果操作成功返回 true。deletefro...

設計迴圈雙端佇列C

設計實現雙端佇列。你的實現需要支援以下操作 mycirculardeque k 建構函式,雙端佇列的大小為k。insertfront 將乙個元素新增到雙端佇列頭部。如果操作成功返回 true。insertlast 將乙個元素新增到雙端佇列尾部。如果操作成功返回 true。deletefront 從雙...