在不使用临时队列的情况下遍历循环队列

时间:2012-04-07 22:39:49

标签: java queue adt

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

我很好,因为它是一个数组,但后来我看到了另一个条件,这让我烦恼。

请记住,您无法自由浏览队列中的所有元素。只有前部元素可访问 在任何时候通过偷看方法。你的contains和intersectWith方法的实现必须 不要使用任何额外的队列来临时保存此队列的某些元素。

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

非常感谢任何帮助。

Mjall

解决方案:

我想出了答案, 方法旋转说明: 方法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;

 }

1 个答案:

答案 0 :(得分:1)

对于这种情况,迭代器是不实际的。

由于它是一个循环队列,你可以记住你已经看过的第一件事(不一定要把它从圆形队列中完全删除),然后将元素出列/排队,直到找到你所知道的为止。寻找或到达第一个出列节点。