3

基本上,我已经获得了 CircularQueue 的实现,我需要实现一个名为“public boolean contains (E other)”的方法,如果参数“other”存在于我的队列中,该方法应该返回 true。

我对它没意见,因为它是一个数组,但后来我看到了另一种情况,这让我很烦。

请记住,您不能在队列中的所有元素之间自由导航。任何时候都只能通过 peek 方法访问最前面的元素。您对 contains 和 intersectWith 方法的实现不得使用任何额外的队列来临时保存该队列的某些元素。

迭代器是否适用于解决这个问题?

非常感谢任何帮助。

米亚尔

解决方案:

答案我想出了,方法旋转描述:方法rotate( int n ) 从队列的前面删除n 个元素并将它们添加到队列的后面。将元素添加到队列后部的顺序与从队列前部移除的顺序相同。例如,给定一个队列 q,其中包含元素 \A、B、C、D、E",其中元素 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 回答