Hirdetés

Keresés

Új hozzászólás Aktív témák

  • #74220800

    törölt tag

    válasz axioma #9326 üzenetére

    Ja maradt az arraylist, az a legkézenfekvőbb. De valamiért, a leadó system testje vmiert ezt a hibát írja ki:

    Removed two elements but the second one had a lower priority than the first one! Amit nem értek. Amugy itt van a programom(class nevet most atneveztem):

    import java.util.ArrayList;

    public class MyPriorityQueue<T extends Comparable<T>> {

    private ArrayList<T> queue;

    private int maxElements;

    public MyPriorityQueue(int maxElements){
    this.maxElements = maxElements;
    queue = new ArrayList<T>();

    }

    public void add(T e) throws IllegalStateException{

    if( size() == maxElements)
    throw new IllegalStateException("The queue is already full!");

    queue.add(e);

    int i = size()-1 ;

    T help;

    while ( i > 0 && ( queue.get( parent(i) ).compareTo( queue.get(i) ) ) > 0 ){

    help = queue.get(i);
    queue.set(i,queue.get( parent(i) ));
    queue.set(parent(i), help);
    i = parent(i);
    }

    }




    public T pop() throws IllegalStateException{

    if(queue.isEmpty())
    throw new IllegalStateException("The queue is empty!");

    T min = queue.get(0);

    queue.remove(0);

    minheapify(0);

    return min;

    }


    public int size(){

    return queue.size();

    }

    public int parent(int i){

    return (i - 1) / 2;
    }


    public void minheapify(int i){

    int l = i*2+1;

    int r = l+1;

    int min;

    T help;

    if (l <= size()-1 && ( queue.get(l).compareTo( queue.get(i) ) ) < 0 )
    min = l;
    else
    min = i;

    if (r <= size()-1 && ( queue.get(r).compareTo( queue.get(min) ) ) < 0)
    min = r;

    if (min != i){

    help = queue.get(i);
    queue.set(i,queue.get(min));
    queue.set(min, help);

    minheapify(min);
    }
    }

    public void display(){

    for(int i = 0; i < queue.size(); i++) {
    System.out.print(queue.get(i) + " ");
    }
    }


    }

Új hozzászólás Aktív témák