Zitat:
Buuuuh! Zwinkern Das ist aber eine Ausrede, denn die paar Zeilen solltest Du in 2 Minuten heruntergetippt haben: Es ist ja einfacher, als meine 5 Zeilen, oder?
Na gut, aber wenn ich Freitag durchfalle mach ich dich verantwortlich (juhu...endlich einen Schuldigen gefunden!)
Delphi-Quellcode:
type PListElement = ^TListElement;
TListElement = record
Next: PListElement;
Data: pointer; // Beispielsweise
end;
type TVList = class
private
FCount: integer;
FWurzel: PListElement;
function IsEmpty: boolean; inline;
property RawItems[Index: integer]: PListElement read... // Den Code zum durchiterieren lass ich jetzt mal weg, ja?
public
property Count: integer read FCount;
procedure Add(Element: pointer);
end;
...
function EmptyList: TVList;
begin
Result := TVList.Create;
end;
constructor TVList.Create;
begin
FWurzel := nil;
FCount := 0;
end;
function TVList.Empty: boolean;
begin
Result := FWurzel = nil;
end;
procedure TVList.Add(Element: pointer);
var InsIndex: integer;
NewEl: PListElement;
begin
if Empty then
InsIndex := 0 else
InsIndex := GetInsIndex(Element);
New(NewEl);
if InsIndex <= Count - 1 then
NewEl^.Next := RawItems[InsIndex];
if InsIndex = 0 then
Wurzel := NewEl else
RawItems[InsIndex - 1].Next := NewEl;
end;
Das ist zwar natürlich nicht besonders sauber und beileibe nicht vollständig (außerdem ungetested), aber zumindest das Einfügen müsste so funktionieren. Dass die Funktion zum Einfüge-Index finden gegeben ist habe ich einfach mal angenommen. Das ließe sich zwar auch mit einem Methodenzeiger-Feld erledigen, aber so viel Arbeit wollte ich jetzt eigentlich nicht investieren.
//edit:
Okay, das
Zitat:
Eine leere Liste ist doch nicht Nichts, oder? Sondern eine 'leere Liste'.
ist natürlich ein Argument. Fragt sich nur, ob das programmiertechnisch irgendeinen Unterschied machen wird. Denn Konkatenation, Schnitt etc. musst du ja sowieso selbst implementieren.
Letztendlich handelt es sich also um verschiedene "Darstellungen" ein und desselben: Deine leere Liste wird charakterisiert durch "nur der Grundknoten vorhanden", meine durch "Wurzel = nil"
Ich sehe zwar mittlerweile, dass du namhafte Verstärkung auf deiner Seite hast, aber so ganz überzeug bin ich immer noch nicht.
PS: Wenn du mir jetzt sagst, dass mein Code länger ist, dann halte ich dem entgegen, dass da ja auch der ganze Klassenoverhead mit drinhängt (bis auf das was ich mir mal geschenkt habe...). Meine Add-Methode ist auch nicht viel länger als deine, und EmptyList sogar noch kürzer
//edit2:
Ooh, so ein Quark. EmptyList geändert.