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).