宿題のために、独自の PriorityQueue と PriorityQueueSort を実装する必要があります。ジェネリックを使用して、ソート機能なしで機能させましたが、今はここで立ち往生しています..
public static void PriorityQueueSort(Iterable<?> list,
PriorityQueue<?,?> pq) {
if (!pq.isEmpty()) {
throw new IllegalArgumentException("Non-Empty PriorityQueue");
}
for (Object obj : list) {
}
}
リストと空の PriorityQueue を渡す必要があるため、これを行う方法についての私の最善の推測は上記のとおりです。不明なタイプのリストを反復処理し、そのリスト内の各要素を適切なタイプで優先度キューに追加できるようにするには、これをどのように攻撃すればよいですか?
編集:
十分な情報が含まれていないと判断されたため、いくつかの詳細を以下に示します。
カスタム PriorityQueue クラスと、K 型のキーと V 型の値を保持するカスタム Entry クラスがあります。
任意の型 T を持つ反復可能なリストを取得して反復処理し、各項目を取得して、最初は空の PriorityQueue に null 値のキーとして追加できるようにする必要があります。次に、PriorityQueue で removeMin() を継続的に呼び出し、それを同じリスト オブジェクトに順番に追加する必要があります。
public class PriorityQueue<K extends Comparable<? super K>,V> {
private Entry<K,V> _head;
private Entry<K,V> _tail;
private int _size;
public PriorityQueue() {
this._head = null;
this._tail = null;
this._size = 0;
}
public int size() {
return _size;
}
public boolean isEmpty() {
return (size() == 0);
}
public Entry<K,V> min() {
if (_head == null) {
return null;
}
Entry<K,V> current = _head;
Entry<K,V> min = _head;;
while (current != null) {
if (current.compareTo(min) < 0) {
min = current;
}
current = current.getNext();
}
return min;
}
public Entry<K,V> insert(K k, V x) {
Entry<K,V> temp = new Entry<K,V>(k,x);
if (_tail == null) {
_tail = temp;
_head = temp;
}
else {
_tail.setNext(temp);
temp.setPrev(_tail);
_tail = temp;
}
return temp;
}
public Entry<K,V> removeMin() {
Entry<K,V> smallest = min();
smallest.getPrev().setNext(smallest.getNext());
smallest.getNext().setPrev(smallest.getPrev());
return smallest;
}
public String toString() {
return null;
}
public static <K> void PriorityQueueSort(Iterable<? extends K> list,
PriorityQueue<? super K, ?> queue) {
for (K item : list) {
queue.insert(item, null);
}
list.clear();
}
public static void main(String[] args) {
PriorityQueue<Integer, Integer> pq =
new PriorityQueue<Integer, Integer>();
pq.insert(4, 2);
pq.insert(5, 1);
System.out.println(pq.min().toString());
}
}