AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

lineare liste mit pointer

Ein Thema von bonanza · begonnen am 29. Mai 2006 · letzter Beitrag vom 29. Mai 2006
Antwort Antwort
Seite 2 von 2     12
bonanza

Registriert seit: 13. Sep 2005
134 Beiträge
 
RAD-Studio 2009 Arc
 
#11

Re: lineare liste mit pointer

  Alt 29. Mai 2006, 19:56
ja das wäre mir ja egal, ob er das vorne oder hinten anhängt.

in wieweit muss ich denn die funktion abändern ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: lineare liste mit pointer

  Alt 29. Mai 2006, 20:03
Das kommt darauf an, was du mit der Liste erreichen willst. Soll die Liste geordnet sein, brauchst du eine Anhängen-(Append) und eine Einfügeb-(Insert) Funktion.
Markus Kinzler
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#13

Re: lineare liste mit pointer

  Alt 29. Mai 2006, 20:11
Das ist eine ziemlich einfach aufgebaute lineare Liste:

Jedes Objekt kennt seinen Vorgänger und seinen Nachfolger und natürlich seinen Inhalt, der irgendwas sein muss, dass von TObject abgeleitet wurde. Dies erkennt man unschwer an den Attributen der Klasse "Listenelement":

Delphi-Quellcode:
   Listenelement = Class
                     inhalt : TObject;
                     vor, nach : Listenelement;
Die eigentliche Liste ist aber die Klasse "List". Beim Erstellen wird ein Anfangs- und ein End-Listenelement erstellt, diese beiden werden verknüpft, in dem die Attribute "vor" und "nach" dementstrechend gesetzt werden:

Delphi-Quellcode:
constructor List.init;
var vorne, hinten : Listenelement;
begin
   create;

   vorne:= Listenelement.init;
   hinten:=listenelement.init;

   vorne.nach := hinten;
   hinten.vor := vorne;

   erstes:= vorne;
   letztes:= hinten;
   aktuelles := vorne;
end;
Zusätzlich muss die Liste wissen, wo der Anfang und wo das Ende und welches das aktuelle Element ist, auch diese werden hier festgelegt und sind die vorher initalisieren Elemente. Das aktuelle Element ist nach dem Initialisieren das erste. Diese beiden ersten Objekte bekommen aber nie Inhalt, sie sind nur da, um den Anfang und das Ende festzulegen.
Um Elemente einzufügen gibt es die Methoden "insert before" und "insert behind", das "before" und "behind" geht dabei immer vom aktuellen Listenelement aus (Attribut "aktuelles", der Klasse "List").
Ich gehe jetzt mal auf "inser before" ein, analog dazu funktioniert auch "insert behind" :
Um das Element dort einzufügen, muss ein neues Element erstellt werden, dass als Attribut "vor" das Element vor dem aktuellen speichert, im Attribut "nach" das aktuelle selber. Außerdem muss dem aktuellen Element noch mitgeteilt werden, dass sich sein Vorgänger geändert hat, also enthält sein Attribut "vor" einen Pointer auf das neu erstellte Element. Und das Element, dass vor dem neuen steht muss auch seinen neuen Nachfolger kennen, also erhält sein Attribut "nach" ebenfalls einen Pointer auf das neue.
Außerdem wird natürlich der Inhalt des neuen Elements noch gesetzt, dieser msus als Parameter übergeben werden.

Hier nochmal die komplette Methode, um das besser nachvollziehen zu können:

Delphi-Quellcode:
procedure List.insertBefore (pInhalt: TObject);
var neues : Listenelement;
begin
  neues:=Listenelement.init;
  neues.inhalt := pInhalt;
  neues.vor:= aktuelles.vor;
  neues.nach := aktuelles;
  aktuelles.vor.nach:=neues;
  aktuelles.vor:=neues;
end;
Die anderen Methoden sind alle sehr einfach. "Next" und "Previous" ändern das aktuelle Element, dazu muss einfach nur der Nachfolger oder Vorgänger des aktuellen Elements abgefragt werden. Mit "toFirst" und "toLast" gelangt man jeder Zeit um ersten und letzten Element, dies ist ganz einfach, da die Pointer hierdrauf bereits am Anfang gespeichert wurden.
"Delete" löscht das aktuelle Element, dazu müssen einfach die Attribute "vor" und "nach" des Vorgängers und Nachfolgers entsprechend geändert werden.

Hoffe das hilft dir.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz