Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Die verkettete Liste (https://www.delphipraxis.net/84509-die-verkettete-liste.html)

Klaus01 19. Jan 2007 06:35

Re: Die verkettete Liste
 
Delphi-Quellcode:
procedure TParameterlist.AddAtEnd(Name, DataType: string);
var param: TParameter; NewItem: PItem;
begin
  param := TParameter.Create(Name,DataType);
//If list is still empty
  if (FFirst = nil) then
  begin
    New(NewItem);
    NewItem.Data := param;
    FFirst := NewItem;
    FCurrently := FFirst;
  end
  //list just has content
  else begin
    SetPointerAtPosition(High);
    New(NewItem);
    NewItem.Data := param;
    NewItem.Next := nil;
    FCurrently.Next := NewItem; // Punkt (1)
  end;

  inc(FCount);
end;

procedure TParameterlist.SetPointerAtPosition(index: integer);
var i: integer;
begin
  if (index <= High) then
  begin
    FCurrently := FFirst;                // was passiert hier wenn FFirst = nil ist
    i := 0;
    while (i < index) do
    begin
     FCurrently := FCurrently.Next; // Punkt(2), weil hier FFirst in s Nirvana zeigt
      inc(i);
    end;
  end;
end;


procedure TParameterlist.Clear;
var ptemp1,ptemp2: PItem;
begin
  if (FCount > 0) then
  begin
    ptemp1 := FFirst;
    while (ptemp1 <> nil) do
    begin
      ptemp2 := ptemp1.Next;
      Dispose(ptemp1);
      ptemp1 := ptemp2;
    end;
    FFirst:=nil;         // damit machst Du deutlich, das die Liste leer ist
    FCurrently:=nil;     // Du setzt FCurrently nicht auf nil und verursachst dann bei Punkt (1)und (2) eine AV
    FCount := 0;
  end;
end;
Grüße
Klaus

shmia 19. Jan 2007 09:57

Re: Die verkettete Liste
 
Aus Wikipedia:
Das Quadratische Rad neu erfinden: Eine schlechte Lösung bereitstellen wenn eine gute bereits existiert.

Wenn du die Klasse für die Schule/Studium brauchst: na gut, dann mach halt weiter.
Wenn's aber etwas sinnvolles werden soll, würde ich den ganzen Code wegwerfen und auf bewährtes zurückgreifen.
z.B.: http://fundementals.sourceforge.net/units.html (Unit cLinkedLists.pas)
Man braucht auch nicht zwingend eine verkettete Liste zu verwenden, sondern kommt mit TList, TObjectList und Verwandten schon recht weit.

Koller 19. Jan 2007 20:53

Re: Die verkettete Liste
 
Ja es funktioniert.

Zitat:

Zitat von shmia
Aus Wikipedia:
Das Quadratische Rad neu erfinden: Eine schlechte Lösung bereitstellen wenn eine gute bereits existiert.

Wenn du die Klasse für die Schule/Studium brauchst: na gut, dann mach halt weiter.
Wenn's aber etwas sinnvolles werden soll, würde ich den ganzen Code wegwerfen und auf bewährtes zurückgreifen.
z.B.: http://fundementals.sourceforge.net/units.html (Unit cLinkedLists.pas)
Man braucht auch nicht zwingend eine verkettete Liste zu verwenden, sondern kommt mit TList, TObjectList und Verwandten schon recht weit.

Naja es ist für die Schule und da will ich es schon selber machen. ;)
Außerdem lernt man ja nebenbei gleich, wenn man nicht bestehendes benutzt. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz