【问题标题】:Implementing queue in java在java中实现队列
【发布时间】:2015-01-24 23:14:14
【问题描述】:

在 Java 中实现队列是很常见的面试问题。我在网上冲浪,看到了许多实现,他们做了一些花哨的事情,比如实现队列接口和编写自己的 addLast()removeFirst() 方法。我的问题是我不能只使用LinkedList() 类并使用其预定义的方法addLastremoveFirst 方法来做同样的事情吗? 例如

LinkedList<Student> qu=new LinkedList<Student>();
qu.add(new Student("anadkat1"));
qu.add(new Student("anadkat2"));
qu.add(new Student("anadkat5"));
System.err.println(qu);
qu.removeFirst();
System.err.println(qu);

这给了我完美的结果。这还不够吗?

【问题讨论】:

  • LinkedList 已经实现了队列,所以你没有实现队列,你只是在使用它。
  • 由于是面试题,目的是让面试官看你是否可以自己编写一些基本的数据结构。它让我们深入了解您的写作方式、使用的风格、解决问题的方式等。
  • 好的,完全明白你的意思。非常感谢。

标签: java queue


【解决方案1】:
public class Queue<T>{
private LinkedList<T> list=new LinkedList<>();

public void insert(T element){
     list.addLast(element);
}

public void remove(){
    list.removeFirst();
}

public int size(){
    return list.size();
}

public T element(){
     return list.getFirst();
}
}

【讨论】:

    【解决方案2】:

    我最近经历了这些面试问题。

    使用 set 方法从列表中添加、删除、chekForEmpty 等是实现队列的一般方法。

    例如:

       public void enqueue(E item) {
         list.addLast(item);
         }
    
       public E dequeue() {
          return list.poll();
          }
    
       public boolean hasItems() {
          return !list.isEmpty();
          }
    
       public int size() {
          return list.size();
          }
    
       public void addItems(GenQueue<? extends E> l) {
          while (l.hasItems())
            list.addLast(l.dequeue());
            }
    

    【讨论】:

      【解决方案3】:

      一种方法是维护一个项目数组q 以及队列头部和尾部的两个索引(最初设置为0)。伪代码如下:

      enqueue(x)
      {   q[tail++] = x;
      }
      
      dequeue()
      {   return q[head++];
      }
      

      如果数组溢出,则将大小加倍并重新插入项目。这产生了每个操作 O(1) 的摊销时间。另一种方法是使用链表(您应该实现)并再次存储指向头部的指针和指向尾部的指针。

      【讨论】:

        猜你喜欢
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        • 2016-08-18
        • 1970-01-01
        • 2022-01-19
        • 2011-05-19
        • 2020-03-26
        • 1970-01-01
        相关资源
        最近更新 更多