Ich habe eine Aufgabe bekommen und ich muss einen Minimum-Heap programmieren, was mir nur teils gelungen ist. Es geht vor allem um die put-Methode(ein Element in den heap einfügen), die je nach Eingabe nicht immer alle Buchstaben im Minimum Heap sortiert wie es sein sollte. Die get- Methode habe ich noch nicht, aber wenn ich die Put.Methode mal ganz habe, sollte es leicht gehen...
Hier der Code:
public class PriorityQueue {
private Comparable[] heap;
private int now;
public PriorityQueue(int nMax){
heap= new Comparable[nMax];
now=0;
}
public boolean isEmpty(){
if (this.now==0)
return true;
else return false;
}
public boolean isFull(){
if (this.now==this.heap.length)
return true;
else return false;
}
public int size(){
return this.now;
}
public void put(Comparable x){
if (this.isFull()) throw new RuntimeException("PriorityQueue is full");
int a=this.now;
this.heap[a]=x;
boolean isCompared=false;
while (isCompared==false){
int parent=(a-1)/2;
if (isEmpty()){
isCompared=true;
}else if (this.heap[parent].compareTo(this.heap[a])<=0){
isCompared=true;
}else{
this.heap[a]=this.heap[parent];
a=parent;
if(a == 0)isCompared=true;
}
}
this.heap[a]=x;
this.now+=1;
}
public Comparable get(){
if (this.isEmpty()) throw new NoSuchElementException("PriorityQueue is empty");
return null;
}
public Comparable top(){
if (this.isEmpty()) throw new NoSuchElementException("PriorityQueue is empty");
return this.heap[0];
}
public String toString(){
if (this.isEmpty()) return "[]";
String s = "[";
for(int i=0;i<this.now;i++){
s += this.heap.toString();
if (i!=this.now-1){
s += ", ";
}
}
return s + "]";
}
}
und hier noch der Test-Driver:
public class TestDriver extends Applet{
public void init() {
String text = "palmtree";
int nMax = text.length();
PriorityQueue queue = new PriorityQueue(nMax);
try {
for (int i=0;i<nMax;i++) {
String s = String.valueOf(text.charAt(i));
queue.put(s);
System.out.println("put "+s+" queue="+queue);
}
/*for (int i=0;i<nMax;i++)
System.out.println("get "+queue.get()+" queue="+queue);
*/}
catch (Exception e) {e.printStackTrace();}
}
}
Das get() habe ich in der Testklasse noch ausgeklammmert,weil ich die noch nicht programmiert habe. Also, danke, wenn sich jemand die Zeit nimmt! :o
Sergej83 Gast |