java - 不使用临时队列遍历循环队列

标签 java queue adt

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

我对它没意见,因为它是一个数组,但后来我看到它的另一个条件让我很烦。

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

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

非常感谢任何帮助。

米亚尔

解决方法:

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

 }

最佳答案

对于这种情况,迭代器不实用。

因为它是一个循环队列,你可以记住你看到的第一件事(不一定要把它从循环队列中完全删除),然后出队/入队直到你找到你要找的东西,或者到达第一个出队节点。

关于java - 不使用临时队列遍历循环队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10058949/

相关文章:

java - Gobblin:java.lang.ClassNotFoundException:org.apache.gobblin.source.extractor.extract.jdbc.MysqlSource

java - java任务控制中的本地地址

java - 格式化 Xstream 生成的 XML

IOS在一个类中多次使用单个dispatch_group

javascript - 如何将音频 blob 从 javascript 发送到 java spring 服务器?

jquery - 重复动画X次

java - LinkedList addLast 函数替换列表中的其他值

java - 在 Eclipse 中更新 ADT 导致许多错误

java - 第一次尝试创建应用程序项目导致 java.lang.NullPointerException 错误

java - 带有 ADT 插件的 Eclipse 中没有 Android 项目选项