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

Java 在不使用临时队列的情况下遍历循环队列,java,queue,adt,Java,Queue,Adt,基本上,我已经得到了一个CircularQueue的实现,我需要实现一个名为“public boolean contains(E other)”的方法,如果参数“other”存在于我的队列中,该方法应该返回true 我对它很满意,因为它是一个数组,但后来我看到了另一个困扰我的条件 请记住,您不能在队列中的所有元素之间自由导航。只有前面的元素是可访问的 任何时候都可以通过peek方法。您对contains和intersectWith方法的实现必须 不要使用任何额外队列来临时保留此队列的某些元素。

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

我对它很满意,因为它是一个数组,但后来我看到了另一个困扰我的条件

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

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

非常感谢您的帮助

Mjall

解决方案:

我想到的答案是, 方法说明: 方法rotate(intn)从队列的前面移除n个元素,并将它们添加到队列的后面 队列元素添加到队列后部的顺序与从队列前部移除的顺序相同 排队等候。例如,给定一个包含元素\a、B、C、D、E“的队列q,其中元素a是 在队列前面,在方法调用q.rotate(2)之后,队列的内容将是\C,D,E, A、 B”


迭代器不适用于这种情况


由于它是一个循环队列,您可以记住看到的第一件事(不一定完全从循环队列中删除),并将元素排/入队列,直到找到要查找的内容,或到达第一个排队列的节点。

一个元素可以在队列中出现两次吗?[我指的是实际的对象,身份而不是平等]-如果不是,为什么你不能持有头部的临时引用,并迭代直到你再次看到它?@amit:听起来约束是你不能只是迭代。“任何时候都只能访问前面的元素”。@OliCharlesworth:在这个循环队列中,如果弹出所有元素,队列是空的还是返回到旧的头部?[我假设是第二个,并将其称为迭代]这是我的想法,但为了从一个队列中退出队列,然后进入另一个临时队列,同时检查值是否存在,然后从临时队列中退出队列并进入原始队列(以维护原始数据)。不允许..如果头被推了两次怎么办?您将在扫描所有元素之前停止。[我假设无法访问节点对象,只能通过队列访问元素对象]@Mjall2:谁说了关于临时队列的事?@Makoto:如果我使用了dequeue方法,它会返回从队列中取出的元素,我需要一个变量来保存它。然后变量与另一个元素匹配,如果不匹配,则进入临时队列..依此类推,直到原始队列为空或我找到了值,然后替换临时队列到original@amit:如果头部(前部)被推了两次?这是否意味着排队两次?
   public boolean contains(E elem) { 

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

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



   } 
   return false;

 }