3

基本的に、CircularQueueの実装が与えられましたが、パラメータ「other」がキューに存在する場合にtrueを返すことになっている「publicboolean contains(Eother)」というメソッドを実装する必要があります。

配列だったので大丈夫でしたが、それから私を悩ませているこの他の条件を見ました。

キュー内のすべての要素を自由にナビゲートすることはできないことに注意してください。peekメソッドを使用すると、いつでもフロント要素にのみアクセスできます。containsメソッドとintersectWithメソッドの実装では、このキューの要素の一部を一時的に保持するために追加のキューを使用してはなりません(MUSTNOT)。

この問題を解決するためにイテレータを適用できますか?

どんな助けでも大歓迎です。

Mjall

解決:

私が思いついた答え、メソッドrotateの説明:メソッドrotate(int n)は、キューの前からn個の要素を削除し、それらをキューの後ろに追加します。要素は、キューの前から削除されるのと同じ順序でキューの後ろに追加されます。たとえば、要素\ A、B、C、D、E "を含むキューqが与えられた場合、要素Aはキューの先頭にあり、メソッド呼び出しq.rotate(2)に続いて、キューの内容が表示されます。 \ 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;

 }
4

1 に答える 1

1

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

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

于 2012-04-07T22:42:12.347 に答える