Avatar billede ozman Nybegynder
19. februar 2004 - 17:45 Der 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..:-)
Avatar billede arne_v Ekspert
19. februar 2004 - 18:10 #1
Er det en eksplicit opgave ? Fordi java.util har al "den slags" !
Avatar billede ozman Nybegynder
19. februar 2004 - 18:52 #2
Nej ikke noget eksplicit...bare nogle tekster eller eksempler der forklare hvordan man programmere med hægtet lister.
Avatar billede arne_v Ekspert
19. februar 2004 - 18:58 #3
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 ?
Avatar billede ozman Nybegynder
19. februar 2004 - 23:04 #4
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.
Avatar billede jakoba Nybegynder
20. februar 2004 - 06:34 #6
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
   
    public String toString() {
        if ( this.nesteListeElement == null ) {
            return this.dineData;
        } else {
            return this.dineData +"\n" + this.nesteListeElement.toString();
        }
    } //endmethod toString

} //endclass Led


class hegtetListe {  //  tester klassen Led

    static Led rodLed = new Led( "" );

    public static void main( String[] args ) {
       
        rodLed.tilfojLed( new Led( "hat" ) );
        rodLed.tilfojLed( new Led( "gamle" ) );
        rodLed.tilfojLed( new Led( "har" ), 2 );
        rodLed.tilfojLed( new Led( "3" ), 3 );
        rodLed.tilfojLed( new Led( "ikke" ), 3 );
        rodLed.tilfojLed( new Led( "den" ), 2 );
        rodLed.tilfojLed( new Led( "buler" ), 500 );
        System.out.println( rodLed.toString() );
       
        Led temp = rodLed.fjernLed();
        System.out.println( "\nfjernede: " +temp.toString() );  // dette kan gå galt. Hvordan?

        temp = rodLed.fjernLed( 3 );
        System.out.println( "\nfjernede: " +temp.toString() );  // dette kan gå galt. Hvordan?
       
        rodLed.tilfojLed( new Led( "Min" ) );
        System.out.println( rodLed.toString() );
       
    } //endmethod main,
   
} //endclass hegetListe

mvh JakobA
Avatar billede ozman Nybegynder
23. november 2004 - 16:03 #7
Godt nok meget, meget sent...men svar???
Avatar billede arne_v Ekspert
23. november 2004 - 18:17 #8
tjo
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester