Announcement

Collapse
No announcement yet.

verkettete Liste

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • verkettete Liste

    Hallo Gemeinde,

    ich habe ein Verständnisproblem und vielleicht gibt es jemand der mir das aufdröseln kann. Und zwar geht um folgendes Objekt:
    <pre>
    type
    PListe = ^TListe;
    TListe = record
    Element1: PChar;
    Element2: Integer;
    Next : PListe;
    end;
    </pre>
    Soweit is auch alles verständlich. Was ich nicht verstehe ist warum "Next" auf das nächste Glied der Kette zeigen soll. Es ist doch auch nur ein Zeiger auf TListe.

    Pädagogen willkommen.

    Danke

    Uwe

  • #2
    Hallo Uwe,<br>die Elemente der verketteten Liste sind Records vom Typ TListe. <b>PListe</b> ist ein <b>Zeiger</b> auf ein solchen <b>Record</b> und somit ein Zeiger auf ein <b>Element</b> der verketteten List.<br>Der Trick bei einer verketteten Liste besteht darin, das ein Element der Liste auf das nächste Element der Liste verweist. In unserem Fall ist es das Recordfeld <b>Next</b> das auf das nächste Element der Liste zeigt.<br>
    <pre>
    -->|---------| |-->|---------|
    A | | | | |
    |Next -----| | Next ---> NIL
    |---------| |---------|
    </pre>
    In der Abbilung ist A vom Typ PListe und zeigt auf das erste Element der Liste. Next ist ebenfalls vom Typ PListe und zeigt wiederum auf ein Element von TListe. Im letzten Element der Liste zeigt Next auf NIL. Wichtig, damit man weiss, wo die Liste aufhört.<br>
    Um dem Feld Element2 im zeiten Element der Liste den Wert 2 zuzuweisen schreibst Du A^.Next^.Element2:=2<br>Über diese Verkettung mit Next kann man sich dann von Element zu Element hangeln

    Comment


    • #3
      Im Prinzip hast du ja auch recht. Es ist nur ein Zeiger auf TListe. Sinn macht es meiner Meinung nach auch nur, wenn du next dynamisch anlegst.<br>
      Mal angenommen Du hast ein first vom Typ Tliste, und möchtest ein zweites Record anlegen. Wenn Du das über first.next:=new(Pliste) anlegst, sind die beiden miteinander vernunden, so daß Du dich mit<pre>

      var
      MeineListe:Tliste;
      begin
      MeineListe:=first;
      while (MeineListe.next<>nil)and (MeineListe.next<>@MeineListe) do
      MeineListe:=MeineListe.next^;
      end;
      </pre>
      durch die komplette Liste hangeln kannst. Wenn Du vorher aber schon weißt wie viele Elemente Du hast, könntest Du ja von vorneherein einfach ein Array mit der gewünschten Anzahl anlegen und einfach über den Index darauf zugreife

      Comment


      • #4
        Das ist eine einfach verkettete Liste. Jedes Listenelement ist eine TListe-Struktur, die natuerlich irgendwie angelegt werden muss. Da bleibt eigentlich nur der Aufruf von GetMem. Die Kette beginnt mit einer Zeigervariable mit dem Wert nil der anzeigt das kein elemnt da ist.. Ueblicherweise fuegt man vorne an. Also eine neue Struktur alloziieren und in deeren Next-Zeiger den Wert der Zeigervariable (Kopf der Liste) eintragen. Jetzt Kopfzeiger auf die neu alloziierte Struktur zeigen lassen. Wir haben jetzt vorne ein Element an die liste angefuegt und von da haengen die weiteren sozusagen herunter wie Knoten an einem Seil

        Comment

        Working...
        X