Program för att rita skiplistor
Detta är ett litet javaprogram som kan rita upp skiplistor på
skärmen. Det kan underlätta vid felsökning. För varje nod ritas en
låda i vilken nyckelns och elementets värde skrivs ut (nyckeln ovanför
elementet). Från varje låda ritas också pilar till de lådor som
vänster-, höger-, upp-, och ner-referenserna går. Om en referens är
null så ritas ingen pil. Om en referens går till ett oväntat ställe
(utanför skiplistan) så ritas pilen till ett svart punkt på
skärmen.
Så här kan det se ut:

En hel och fin skiplista

En trasig och inte alls bra skiplista
Nedan finns några länkar till ett program som kan rita upp skiplistor
på skärmen, så att man kan se hur de ser ut och att alla pekare i dem
går till rätt platser.
- SkipDraw.java -- huvudfilen
- QuadNode.java -- gränssnittsdefinition
- SkipMain.java -- testprogram
För att det ska fungera måste noderna implementera ett gränssnitt som
beskriver hur man går från en nod till en granne i skiplistan. Detta
finns i filen QuadNode.java ovan.
Gränssnittet ser ut så här:
//Filen QuadNode.java
public interface QuadNode {
QuadNode Up();
QuadNode Down();
QuadNode Left();
QuadNode Right();
Object Key();
Object Data();
}
Det borde inte vara svårt att låta noderna implementera detta
gränssnitt. Det handlar bara om att lägga till ett par rader. Här är ett exempel:
// Nodklass till skiplistan.
class Node implements QuadNode {
// Denna bit ser ut som förut och behöver inte ändras
Node after, before, below, above;
Object key, element;
Node(...) { ... }
// Raderna nedanför har lagts till. Notera att alla
// metoder deklarerats public.
public QuadNode Left() { return before; }
public QuadNode Right() { return after; }
public QuadNode Up() { return above; }
public QuadNode Down() { return below; }
public Object Key() { return key; }
public Object Data() { return element; }
}
Testprogrammet SkipMain.java tar ett heltalsargument på kommandoraden
och stoppar in lika många slumpmässiga heltal i skiplistan. Därefter
ritas en bild av skiplistan upp på skärmen. Om fönstret är litet och
inget syns i det är det bara att göra det större.
Testprogrammet måste få tag till en av noderna i skiplistan, det
spelar ingen roll vilken. I SkipMain.java antas att en sådan
finns i variabeln theTop. Namnet kan enkelt bytas ut.
Så här ser SkipMain.java ut:
//Filen SkipMain.java
public class SkipMain {
public static void main(String[] args) {
int nElem = Integer.parseInt(args[0]);
SkipList s = new SkipList();
for(int i = 0; i<nElem; i++)
s.insert("" + ((int) (Math.random() * 10000.0)), "--");
new SkipDraw(s.theTop); // Byt s.theTop mot övre vänsta hörnet i er skiplista
}
}
Lycka till, och hoppas att det blir fina bilder av skiplistorna!
Senast ändrad av Tomas Oppelstrup, 2001-01-24