基本上我已经获得了一个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;
}
答案 0 :(得分:1)
对于这种情况,迭代器是不实际的。
由于它是一个循环队列,你可以记住你已经看过的第一件事(不一定要把它从圆形队列中完全删除),然后将元素出列/排队,直到找到你所知道的为止。寻找或到达第一个出列节点。