Как можно реализовать кучу, что каждый узел является классом? - PullRequest
1 голос
/ 20 октября 2011

Я хочу создать структуру Heap, чтобы каждый узел имел 2 данных, 1) строку 2) int так что я думаю, что каждый узел должен быть классом с именем «heapNode», но у меня проблема в методе подкачки, пожалуйста, помогите мне

import java.util.ArrayList;
public class MainHeap {
    ArrayList<heapNode> heap;

    MainHeap (){
         new ArrayList<heapNode>();
    }

    public int getMin(){
        return heap.get(0).data ;
    }

     private int parent(int pos) {
            return  pos / 2;
    }

     private void swap(int pos1, int pos2) {
            heapNode temp =new heapNode();

            temp = heap.get(pos1);
            heap.get(pos1) = heap.get(pos2);
            heap.get(pos2) = temp;
            }
     public void insert(int elem) {

            int max = heap.size();
            heap.get(max).data = elem ;
            int current = heap.size() ;
            while (heap.get(current).data < heap.get(parent(current)).data){
                swap ( current , parent(current));
            }

        }

}

и это мой класс heapNode

public class heapNode {
    int data;
    String fileName;
}

метод своп имеет ошибку, но я не могу решить ошибки

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

Ваш код подкачки фактически заставляет объекты указывать на разные объекты.Он не изменяет позиции в самом массиве.При использовании arraylist вам придется удалить объект из индекса и установить для этого объекта новый индекс для замены, иначе вы можете использовать другую структуру данных.

0 голосов
/ 20 октября 2011

java.util.PriorityQueue<YourClass>

...