循環キューの実装を設計します。循環キューは線形データ構造であり、そのパフォーマンスはFIFO(先入れ先出し)の原則に基づいており、キューの末尾がキューの先頭の後に接続されてループを形成します。「リングバッファ」とも呼ばれます。
循環キューの1つの利点は、以前このキューで使用されていたスペースを使用できることです。通常のキューでは、キューがいっぱいになると、キューの前にまだスペースがある場合でも、次の要素を挿入できません。しかし、循環キューを使用すると、これらのスペースを使用して新しい値を格納できます。
実装では、次の操作をサポートする必要があります。
MyCircularQueue(k)
:コンストラクター、キューの長さをkに設定します。Front
:チームのトップから要素を取得します。キューが空の場合、-1が返されます。Rear
:テール要素を取得します。キューが空の場合、-1が返されます。enQueue(value)
:循環キューに要素を挿入します。成功した場合はtrueを返します。deQueue()
:循環キューから要素を削除します。正常に削除された場合はtrueを返します。isEmpty()
処置:循環キューが空かどうかを確認してください。isFull()
処置:循環キューがいっぱいかどうかを確認してください。- 実装のアイデア:ヘッドポインターとテールポインターの初期位置は-1で、最初の要素がエンキューされるとき、テール++の後にテールを同時に0に設定します。
- フォームの頭、尾のポインタは常にそれぞれ頭と尾の要素を指します。デキュー操作を実行し、コンテナに要素が1つしかない場合、
- ヘッドとテールの両方がこの要素を指します。これは、チームに参加した後、要素が1つしかないポイントに対応します。だからコンテナがラウンドを実行するとき
- チームに出入りした後、要素はなく、2つのポインターを初期状態に設定します。
-
クラスMyCircularQueue {
private int [] data;
プライベートintヘッド。
プライベートintテール。
プライベート整数サイズ。/ **ここでデータ構造を初期化します。キューのサイズをkに設定します。* /
public MyCircularQueue(int k){
data = new int [k];
頭= -1;
テール= -1;
サイズ= k;
}
/ **循環キューに要素を挿入します。操作が成功した場合はtrueを返します。* /
public boolean enQueue(int value){
if(isFull()== true){
return false;
}
if(isEmpty()== true){
head = 0;
}
テール=(テール+ 1)%サイズ;
data [tail] = value;
trueを返します。
}
/ **循環キューから要素を削除します。操作が成功した場合はtrueを返します。* /
public boolean deQueue(){
if(isEmpty()== true){
return false;
}
if(head == tail){
head = -1;
テール= -1;
trueを返します。
}
head =(head + 1)%size;
trueを返します。
}
/ **キューから先頭のアイテムを取得します。* /
public int Front(){
if(isEmpty()== true){
return -1;
}
return data [head];
}
/ **キューから最後のアイテムを取得します。* /
public int Rear(){
if(isEmpty()== true){
-1を返す;
}
return data [tail];
}
/ **循環キューが空かどうかを確認します。* /
public boolean isEmpty(){
return head == -1;
}
/ **循環キューがいっぱいかどうかを確認します。* /
public boolean isFull(){
return((tail + 1)%size)== head;
}
}/ **
* MyCircularQueueオブジェクトはインスタンス化され、次のように呼び出されます。
* MyCircularQueue obj = new MyCircularQueue(k);
*ブール値param_1 = obj.enQueue(value);
*ブール値param_2 = obj.deQueue();
* int param_3 = obj.Front();
* int param_4 = obj.Rear();
*ブール値param_5 = obj.isEmpty();
*ブール値param_6 = obj.isFull();
* /