19. februar 2004 - 17:45Der er
7 kommentarer og 1 løsning
problemer med hægtet liste
Hej Jeg skal til at programmere med hægtet lister i java..Er der nogen der kender nogle gode sider på nettet, hvor man kan læse lidt om det??? eller evt. nogle hints til en nybegynder..:-)
Jeg prøver at formulere mig noget bedre: er der nogen speciel grund til at du vil implementere dig egen klasse frmfor at bruge nogen af de indbyggede i Java ?
Grunden er at jeg er igang med at lære det i skolen, og skal med høj sandsynlighed bruge det i en stor opgave om nogle uger. Derfor søger jeg materiale og eksempler der kan hjælpe mig med at forstå hele konceptet med hægtet lister.
Din liste består af Objekter af en eller anden klasse. fx:
class Led { Led nesteListeElement; // Data dineData; }
Hvert led i listen peger så på det næste led, indtil det allersidste der peger på null
Der hvor listen skal lagres behøver du så en enkelt pegepind der peger på det allerførste led i listen: Led listeRod;
Det kan kompliceres i det uendelige. men det er grundlaget i en hægtet liste. Og den faldgrube alle nybegyndere (og også ofte de øvede) falder i er at de 'glemmer' hvad der stod i nesteListeElement når de fjerner eller indsætter et led i listen.
Og så er det rart at jave er objektorienteret. du kan skrive metoderne til at manipulere listen lokalt i din klasse Led. Så behøver du kun skrive dem rigtigt een gang.
fx:
class Led { private Led nesteListeElement; // peger på næste led // jeg har gjort nesteListeElement privat så vi kan stole det kun er // metoderne i denne klasse der kan pille ved den. public String dineData; // eller det kan være altmulig andet.
public Led ( String dineData ) { this.dineData = dineData; this.nesteListeElement = null; } //endconstructor Led
public void tilfojLed ( Led nytLed ) { // tilføj et nyt led efter dette nytLed.nesteListeElement = this.nesteListeElement; this.nesteListeElement = nytLed; } //endmethod tilfojLed
public void tilfojLed ( Led nytLed, int plads ) { // tilføj et nyt led det led der er 'plads' led længere henne i listen // (eller bagerst hvis vi ikke kan gå så mange led hen) if ( plads > 0 && this.nesteListeElement != null ) { this.nesteListeElement.tilfojLed( nytLed, plads - 1 ); } else { this.tilfojLed( nytLed ); } } //endmethod tilfojLed
public Led fjernLed () { // fjerner leddet efter dette led. // returnerer det fjernede led Led resultat = this.nesteListeElement; // husk det led vi vil tage ud if ( resultat == null ) { // der er ikke noget næste led return null; } else { this.nesteListeElement = resultat.nesteListeElement; // fjern det fra listen resultat.nesteListeElement = null; // sørg for at det led du returnerer ikke peger på noget. return resultat; } } //endmethod fjernLed
public Led fjernLed ( int plads ) { // fjerner leddet efter det led der er 'plads' led længere henne i listen. // returnerer det fjernede led if ( plads > 0 && this.nesteListeElement != null ) { return this.nesteListeElement.fjernLed( plads - 1 ); } else { return this.fjernLed(); } } //endmethod fjernLed
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.