2013-05-16 2 views
1

우선 순위 대기열과 같이 정렬 된 대기열에서 작업하고 있습니다. 나는 이미 그것을 List와 함께했고, 이미 훌륭하게 작동했습니다. 이제 배열로 처리하고 싶습니다. 하지만 난 조금 논리적 인 문제가 새로운 요소를 추가하고 정렬 된 배열에 삽입합니다.정렬 된 배열 대기열에 삽입

최종 출력 것과 같아야
우선 순위 : 5 값 : X
우선 순위 : 4 값 (및 등등) ISO
....
따라서 소자와 가장 우선 순위가 높은 우선 순위는 인덱스 = 0이어야합니다.
저는 잘 모르겠습니다. (예, 전환하기 만하면됩니다.하지만 할 수는 없습니다.)// 어떻게하는지 ...

나는 이미 몇 가지 시도했지만 붙어있다 ... :/누군가를 기쁘게 할 수있다. 도와 줘?

여기 내 코드입니다 :

public class Queue { 

private QueueElem[] a; 

public Queue(int capacity) 
{ 
    QueueElem[] tempQueue = new QueueElem[capacity]; 
    a= tempQueue; 
} 

public void enqueue(int p, String v) 
{ 
    QueueElem neu = new QueueElem(p,v); 
    int i=0; 

     while(i<a.length) 
     { 
      if (a[i] == null) 
      { 
       a[i] = neu; 
       break; 
      } 
      i++; 
     } 
} 

public void writeQueue() 
{ 
    int i=0; 
    while((i< a.length) && (a[i] != null)) 
    { 
     System.out.println("Priority: " + a[i].priority + " Value: " + a[i].value); 
     i++; 
    } 
} 

public static void main(String args[]) 
{ 
    Queue neu = new Queue(10); 
    neu.enqueue(4,"iso"); 
    neu.enqueue(2,"abc"); 
    neu.enqueue(5,"x"); 
    neu.enqueue(1,"abc"); 
    neu.enqueue(4,"bap"); 
    neu.enqueue(2,"xvf"); 
    neu.enqueue(4,"buep"); 
} 
}//end class Queue 


class QueueElem { 
int priority; 
String value = new String(); 

public QueueElem(){ } 

public QueueElem(int p, String v) 
{ 
    this.priority = p; 
    this.value = v; 
} 

public int getPrio() 
{ 
    return this.priority; 
} 

public String getValue() 
{ 
    return this.value; 
} 
} 

답변

0

당신이 최대 힙로 배열을 해석하면 그것은 더 좋을 것이다. 이것은 우선 순위 큐를 구현하는 일반적인 방법입니다.

우선 순위 대기열에 정렬 된 배열을 유지하려는 경우 insertion sort (일종의 배열로 시작해야하며 배열을 정렬하지 않아도됩니다. 비어 있습니다. 정렬 된 순서를 유지하면서 간단하게 추가하는 배열). 새 요소를 삽입 할 때마다 배열을 반복하여 올바른 지점을 찾은 다음 해당 지점에서 현재 엘레멘트를 이동 한 후에 그 지점을 삽입합니다. 이것은 힙을 사용하여 구현하는 것보다 성능이 좋지 않습니다. 삽입 할 때마다 최악의 경우 성능이 O(n)이되는 반면, 힙을 사용하면 O(logn)이됩니다.

0

왜 원시 배열로 작업하고 싶은지 이해할 수 없습니다. 특히 List로 구현 했으므로 더욱 그렇습니다.

원시 배열에 요소를 삽입하는 방법을 보려면 ArrayList 코드에서 원시 배열을 사용하기 때문에 ArrayList 코드를 살펴보십시오. 루프 내에서 복사 할 수있는 모든 요소를 ​​삽입 포인터 오른쪽으로 이동하거나 System.arraycopy()를 사용하여 요소를 이동해야합니다. 그러나 가장 중요한 부분은 요소를 추가 할 때 배열 크기가 1 씩 증가하기 때문에 새 배열을 만들어야 할 가능성이 높다는 것입니다. 이는 데이터 크기와 정확히 일치하는 배열을 사용하는 경우 또는 더 큰 배열을 사용하는 경우에 따라 달라집니다. ArrayList에서와 같이).