[데이터 구조 와 알고리즘 05] 우선 순위 대기 열
2656 단어 데이터 구조
연산 제한: 자동 정렬.자동 정렬 인 이상 먼저 나 온 문 제 를 고려 할 필요 가 없습니다. 정렬 한 후에 어 지 러 워 지기 때문에 정렬 방식 (최대 로 할 것 인지 최소 로 할 것 인지) 만 정의 해 야 합 니 다. 여 기 는 논 리 를 간소화 하기 위해 서 대기 열 이 저장 공간 을 순환 적 으로 사용 하 는 문 제 를 고려 해 야 합 니 다. 우 리 는 최대 치 를 아래 표 시 된 0 의 위치 에 영원히 두 고 대기 열 을 낼 때 최소 치 를 취해 야 합 니 다.물론 너 도 거꾸로 할 수 있다.
기본 연산:
1. 첨가.
2: 제거.
3: 최소 치 를 취한 다.
public class PriorityQueue {
private Long[] queArray;
private int maxSize ;//
private int nItems ;//
public PriorityQueue(int size){
maxSize = size ;
queArray = new Long[maxSize];
nItems = 0 ;
}
// ,
public void insert(long item){
if(isFull()) throw new ArrayIndexOutOfBoundsException(maxSize);
int j = 0 ;
if(nItems==0){
queArray[nItems++] = item ;
}else{
for(j=nItems-1 ;j>=0;j--){
if(item>queArray[j]){
queArray[j+1] = queArray[j];
}else{
break;
}
}
queArray[j+1] = item;
nItems++;
}
}
public long remove(){
if(isEmpty()) throw new NullPointerException();
return queArray[--nItems];
}
public long min(){
if(isEmpty()) throw new NullPointerException();
return queArray[nItems-1];
}
public boolean isEmpty(){
return (nItems==0);
}
public boolean isFull(){
return (nItems==maxSize);
}
public static void main(String[] args) {
PriorityQueue priorityQueue = new PriorityQueue(10);
priorityQueue.insert(10);
priorityQueue.insert(13);
priorityQueue.insert(15);
priorityQueue.insert(8);
synchronized (System.out) {
for(int i =0;i<10;i++){
System.out.print(priorityQueue.queArray[i]+",");
}
System.out.println();
System.out.println("min"+priorityQueue.min());
System.out.println("remove"+priorityQueue.remove());
System.out.println("remove"+priorityQueue.remove());
System.out.println("remove"+priorityQueue.remove());
System.out.println("remove"+priorityQueue.remove());
//System.out.println("min"+priorityQueue.min());
System.out.println("remove"+priorityQueue.remove());
}
}
}
실행 결과:
15,13,10,8,null,null,null,null,null,null,
min8
remove8
remove10
remove13
remove15
Exception in thread "main" java.lang.NullPointerException
at data.queue.PriorityQueue.remove(PriorityQueue.java:47)
at data.queue.PriorityQueue.main(PriorityQueue.java:80)
코드 가 너무 간단 해서 주석 을 달 지 않 습 니 다.
이것 은 배열 로 이 루어 진 우선 순위 대기 열 입 니 다. 사실은 여러 가지 실현 방식 이 있 습 니 다. 그 다음 에 나무의 사상 을 통 해 이 루어 진 우선 순위 대기 열 을 소개 할 것 입 니 다. 사실은 다른 이름 인 더미 가 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.