基本上我得到了一个CircularQueue的实现,我需要实现一个名为'public boolean contains(E other)'的方法,如果参数'其他“存在于我的队列中。在不使用临时队列的情况下遍历一个循环队列
我对它很好,因为它是一个数组,但后来我看到了这个正在扰乱我的其他条件。
请记住,您无法自由浏览队列中的所有元素。只有前面的元素可以在任何时候通过peek方法访问 。您的contains和intersectWith方法的实现必须不使用任何额外的队列来临时保存此队列的某些元素。
Iterator是否适用于解决此问题?
任何帮助,高度赞赏。
Mjall
解决方案:
答案我想出了, 方法旋转描述: 方法旋转(INT N)从队列中移除的前n个元素,并将它们添加到的后队列中的 。这些元素以相同的顺序添加到队列尾部,因为它们从队列的前面 中删除。例如,给定包含元素\ A,B,C,d,E”,其中A元素是 在队列的前部的队列Q,以下方法调用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;
}
一个元素可以在队列中两次? [我的意思是实际的对象,身份不平等] - 如果没有,为什么你不能持有脑袋的临时参考,并迭代,直到你再次看到它? – amit 2012-04-07 22:42:33
@amit:这听起来像约束是你不能迭代。 “只有前面的元素可以随时访问”。 – 2012-04-07 22:43:17
@OliCharlesworth:在这个循环队列中,如果弹出所有元素,队列是空的还是会返回到旧的头部? [我以为第二和refered它作为迭代] – amit 2012-04-07 22:44:56