2012-04-07 3 views
3

基本的に私はCircularQueueの実装を与えられました。 'public boolean contains(E other)'というメソッドを実装する必要があります。他の人は私のキューに存在します。一時的なキューを使わずに循環キューを横切る

それは配列だったので、私はそれで大丈夫でしたが、その後、私はそれを盗聴しているこの他の状態を見ました。

キュー内のすべての要素を自由にナビゲートできないことに注意してください。 peekメソッドを使用すると、フロントエレメントだけがいつでもアクセス可能です( )。 containsとintersectWithメソッドの実装は、このキューの要素のいくつかを一時的に保持するために余分なキューを使用してはならない(MUST )。

この問題を解決するためにIteratorを適用できますか?

ご協力いただきまして誠にありがとうございます。

Mjall

ソリューション:私が思いついた

回答、 方法が説明を回転させる: rotateメソッド(int型n)は、キューの先頭からn個の要素を削除し、背面に追加します キュー。要素は、キューの前面の から削除されたのと同じ順序でキューの後部に追加されます。例えば、要素Aが、キューの先頭にある であり、メソッド呼び出しq.rotate(2)に続いて、要素A、B、C、D、E "を含むキューqが与えられた場合、キューは\ C、D、E、 A、B "となります。

public boolean contains(E elem) { 

    while(this.isEmpty() != true){ 

     if(this.peek() == elem){return true;} 
     else{rotate(1);} 



    } 
    return false; 

} 
+0

要素をキューに2回入れることはできますか? [私は実際のオブジェクト、アイデンティティが平等ではないことを意味する] - そうでなければ、なぜあなたは頭の一時的な参照を保持できないのでしょうか? – amit

+0

@amit:制約のように聞こえるのは、繰り返すことができないということです。 msgstr "フロントエレメントだけがいつでもアクセス可能です"#:。 –

+0

@OliCharlesworth:この循環キューでは、すべての要素をポップした場合、キューは空になるか古いヘッダーに戻りますか? [私は2番目を仮定し、反復としてそれを参照してください] – amit

答えて

1

この状況ではイテレータは実用的ではありません。

循環キューなので、最初に見たことがあります(必ずしも循環キューから完全に削除されているわけではありません)、探しているものが見つかるか、到着するまで要素をデキュー/エンキューしますデキューされた最初のノード

+0

これは私が思ったのですが、あるキューからデキューするために、別の一時キューにエンキューし、値の有無をチェックしながら、元のデータを維持するために元のキューにキューイングします。許可されていません.. – Mjall2

+0

頭が2回押されたらどうなりますか?すべての要素をスキャンする前に停止します。 [私はノードオブジェクトへのアクセスがないと仮定しています、キューを介して要素オブジェクトにのみ] – amit

+0

@ Mjall2:誰が一時的なキューについて何を言ったのですか? –

関連する問題