2015-01-24 2 views
-2

Java로 큐를 구현하는 것은 꽤 일반적인 인터뷰 질문입니다. 온라인에서 서핑을하고 대기열 인터페이스를 구현하고 자신의 addLast()removeFirst() 메서드를 작성하는 것과 같은 멋진 작업을 수행하는 많은 구현을 보았습니다. 내 질문에 그냥 LinkedList() 클래스를 사용할 수 없으며 사전 정의 된 메서드를 사용 addLastremoveFirst 같은 작업을 수행 할 수 있습니까 ?? 예 :Java에서 큐 구현

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); 

이것은 내게 완벽한 결과를 제공합니다. 이것으로 충분하지 않습니까?

+4

LinkedList는 대기열을 이미 구현하고 있으므로 대기열을 구현하지 않으므로 간단하게 사용하고 있습니다. –

+4

인터뷰 질문이기 때문에 면접자가 기본적인 데이터 구조를 직접 코딩 할 수 있는지 확인하는 것이 목표입니다. 그것은 당신에게 당신이 쓰는 방법, 당신이 사용하는 스타일, 당신이 문제에 접근하는 방법 등에 대한 통찰력을줍니다. – Joeblade

+0

괜찮습니다. 엄청 고마워. – user3925365

답변

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(); 
} 
} 
0

나는 최근에 이런 종류의 면접 질문을 마쳤습니다.

목록에서 추가, 제거, 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()); 
     } 
0

하나의 방법은 항목 q 헤드 두 인덱스 배열 큐의 테일 (초기에 0으로 설정)을 유지하는 것이다. 의사 코드는 다음과 같습니다.

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

dequeue() 
{ return q[head++]; 
} 

배열이 오버플로되면 크기를 두 배로 늘린 다음 항목을 다시 삽입하십시오. 이렇게하면 작업 당 O (1) 상각 시간이 생깁니다. 또 다른 방법은 연결된 목록 (구현해야하는)을 사용하고 헤드에 대한 포인터와 꼬리에 대한 포인터를 다시 저장하는 것입니다.