简体   繁体   中英

Heap implementation of priority queue?

I'm trying to implement a queue of patients using a heap (with root smaller than children) but when I print the queue, the queue of patients doesn't look prioritized.

Insertion method works fine but it's the enqueue that doesn't prioritize items?

// Heap class
.....some code

//insertion: inserts patients into minimum heap using an array.
//expand array as needed and reorder heap to maintain its properties

public void insert(ER_Patient patient) {
    if(heapArray.length==count)
        expand();
    heapArray[count] = patient;
    count++;
    if(count>1)
        reorder();
}

// Priority Queue class
.......some code

public void enqueue(ER_Patient patient) {
    try {
        heap.insert(patient);
    } catch (NoSuchCategoryException exception) {
        System.out.println("Can't enqueue");
    }

}

// copy content of original's array to a new larger array
private void expand(){
    ER_Patient[] tempArray = new ER_Patient[heapArray.length * 8];
    for(int i=0;i<=heapArray.length-1;i++)
        tempArray[i]=heapArray[i];
    heapArray = tempArray;
}

// maintain heap property by keeping roots smaller than children
private void reorder(){
    ER_Patient temp;
    int next = count -1;
    temp = heapArray[next];
    while((next!=0) && temp.compareTo(heapArray[(next-1)/2])<0){
        heapArray[next] = heapArray[(next-1)/2];
        next = (next-1)/2;
    }
    heapArray[next] = temp;
}

This is how I print:

public void display(Heap h)
{
    for(int i=0;i<h.count;i++)
        System.out.println(heapArray[i]);
}

Wrong.

Unless you successively remove the first item and print it, you won't get an ordered listing. The heap array itself isn't sequential.

Shouldn't the last line of reorder method be part of the while loop?

heapArray[next] = temp;

Also, there should be proper dequeue() method out there

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM