Einzelnen Beitrag anzeigen

Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: PhysicEngine, Fragen zur Datenstruktur

  Alt 21. Aug 2014, 16:47
Du kannst dein Record erweitern:
Delphi-Quellcode:
Type
  TDaten = record x,y,z,n : double; del : integer end;

// wenn del= 0 ist, dann ist der record gültig
// ansonsten enthält 'del' den Index des nächsten freien Platzes im Array oder -1
var
  ListenGroesse,
  ersterFreierPlatz : Integer; // = -1 am Anfang, oder wenn es keine freie Stelle gibt

Procedure Initialisieren;
Begin
  ListenGroesse := 0;
  ersterFreierPlatz := -1;
End;

Procedure Loeschen (Index : Integer)
begin
  if Liste[Index].Del != 0 then raise Exception.Create('Platz schon gelöscht');
  Liste[Index].Del = ersterFreierPlatz;
  ersterFreierPlatz := Index;
End;

Function NeuerPlatz : Integer;
Begin
  if ersterFreierPlatz = -1 then begin
    if ListenGroesse = MaximaleListenGroesse then raise Exception.Create('Speicherüberlauf');
    ListenGroesse := ListenGroesse + 1;
    Result := ListenGroesse - 1;
  end else begin
    Result := ersterFreierPlatz;
    ersterFreierPlatz := Liste[Result].Del;
    Liste[Result].Del := 0;
  end
end;
Die Idee von Aphton ist noch einfacher, aber genau dann falsch, wenn Du dir merkten musst, das z.B. am Index #5 eine Kuh ist. Denn wenn die Kuh am Ende der Liste ist und ein Element wird gelöscht (z.B. #2, dann wandert die Kuh ja in das Element #2). Und wenn Du dann später die Kuh suchst, isse wech (bzw. nach #2 gewandert).
  Mit Zitat antworten Zitat