当前位置: 首页 > 面试题库 >

在Java中实现双端队列的问题

孔权
2023-03-14
问题内容

抱歉,下面是我在这里遇到的一个问题:在这里,我试图运行此方法以从双面队列(双端队列)中删除通用值(EltType),但是我一直遇到错误,我两次调用insertFirst ,然后将值“
3”插入数组两次,然后,当我运行removeFirst时,它将打印出“ 3”一次,然后打印出“ Null”。有人可以帮我吗?

class ArrayBasedDeque<EltType> {

  private final int CAPACITY = 10;
  private int capacity;
  private int end;
  private EltType deque[];

  public ArrayBasedDeque() {
    this.capacity = CAPACITY;
    deque = (EltType[]) (new Object[capacity]);  
  }


 public EltType removeFirst() {
    EltType[] tempArray;
    EltType returned = deque[0];
    tempArray = (EltType[]) new Object[capacity];
      for (int i=1;i<capacity;i++) {
        tempArray[i-1] = deque[i]; 
      }
      deque = tempArray;
    return returned;
  }


  public boolean isEmpty() {
    return end == 0;
  }

  public void insertFirst(EltType first) {
    if(!isEmpty()) {
    EltType[] tempArray;
    tempArray = (EltType[]) new Object[capacity+1];
    for (int i=0;i<deque.length;i++) {
      tempArray[i+1] = deque[i]; 
    }
    deque = tempArray; 
    }
   deque[0] = first;
  }

}

谢谢 :)


问题答案:

明显的问题是它end永远不会改变。 isEmpty()将永远返回true。现在,让我们看看您的insertFirst()方法。

public void insertFirst(EltType first) {
    if(!isEmpty()) {
        EltType[] tempArray;
        tempArray = (EltType[]) new Object[capacity+1];
        for (int i=0;i<deque.length;i++) {
            tempArray[i+1] = deque[i]; 
        }

        deque = tempArray; 
    } 
    deque[0] = first;
}

知道无论如何isEmpty()都会返回true,这段代码有什么问题?



 类似资料:
  • 本文向大家介绍C ++程序在STL中实现双端队列,包括了C ++程序在STL中实现双端队列的使用技巧和注意事项,需要的朋友参考一下 双端队列是一种队列数据结构,其中在两端(前端和后端)都执行插入和删除操作。可以在前后位置插入数据,也可以从前后位置删除数据。 算法 范例程式码 输出结果

  • queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。除了基本的 Collection 操作外,队列还提供其他的插入、提取和检查操作。 每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,具体取决于操作)。 抛出异常 返回特殊值 插入 add

  • 本文向大家介绍JS中队列和双端队列实现及应用详解,包括了JS中队列和双端队列实现及应用详解的使用技巧和注意事项,需要的朋友参考一下 队列 队列 双端队列数据结构 应用 用击鼓传花游戏模拟循环队列 用双端对列检查一个词是否构成回文 生成 1 到 n 的二进制数 队列和双端队列 队列遵循先进后出(FIFO, 也称为先来先服务) 原则的. 日常有很多这样场景: 排队购票、银行排队等. 由对列的特性,银行

  • 2)Java的内置使用了两个锁:takeLock和putLock,并分别用在put()和take()中,我看到间隔队列是一个链表,不是线程安全的,那怎么行呢?

  • 问题内容: 我最近开始研究如何在Python中实现各种数据结构,以使我的代码更高效。在研究列表和双端队列的工作方式时,我发现,我想转移和取消移位,可以将列表中的O(n)减少到双端队列的O(1)的时间(列表实现为具有每次在前面插入东西时都可以完全复制,等等。)。我似乎找不到关于如何实现双端队列的细节,以及其缺点与列表的细节。有人可以启发我解决这两个问题吗? 问题答案: https://github.

  • 主要内容:1 LinkedBlockingDeque的概述,2 LinkedBlockingDeque的原理,2.1 主要属性,2.2 构造器,2.3 入队操作,2.4 出队操作,2.5 检查操作,2.6 size操作,2.7 迭代操作,3 LinkedBlockingDeque的总结基于JDK1.8详细介绍了LinkedBlockingDeque的底层源码实现,包括双端队列的入队列、出队列、迭代等操作源码。实际上LinkedBlockingDeque的源码还是非常简单的! 1 LinkedBl