![]() |
Eine verkettete Liste
Hallo Leute,
ich habe ein kleines Problem mit der Aufgabe meines Lehrers. Er möchte, dass wir (Informatikkurs) eine einfache verkettete Liste erstellen. Gesagt, getan. So jetzt kommt er heute an und sagt ich habe es falsch, da ich mit Records gearbeitet habe oO. Ich poste mal mein Quellcode:
Delphi-Quellcode:
Ich verstehe nicht was daran falsch sein sollte, naja egal. Er sagt ich soll es objektorientiert machen. Er will das ich 3 Units benutze (Ausgabe[Form], TEListe[wo head, tail & aktuell stehen soll] und TListenElement[siehe oben, von den Variablen gleich])
Interface
type PListe = ^TListenElement; TListenElement = Record Daten: String; Naechstes: PListe; end; ... TForm1 = class(TForm) ... private head: PListe; aktuell: PListe; tail: PListe; ... implementation procedure TForm1.Einlesen(Sender: TObject); var p1,p2: PListe; begin New(p1); p1^.Daten := Edit1.Text; p1^.Naechstes := NIL; if head = NIL then head := p1 else begin p2 := head; while(p2^.Naechstes <> NIL) do p2:= p2^.Naechstes; p2^.Naechstes := p1; end; aktuell := p1; ... end; ... So dazu habe ich eine Frage:
Delphi-Quellcode:
Laut meinem Lehrer ist new(p1) und p1 := TElement.Create das selbe und p1 erhält die Speicheradresse, aber das tut Delphi überhaupt nicht!!
type
TElist = class private head: TLElement; tail: TLElement; akt : TLElement; count: Cardinal; public procedure add(Daten: Integer); end; implementation procedure TElist.add(Daten: Integer); var p1, p2: TLElement; begin p1 := TLElement.Create; p1.setData(Daten); p1.setRechts(NIL); if head = NIL then head := p1 else begin p2 := head; end; ... end; Muss man nicht mit Zeiger arbeiten? Also ^ ? Er sagt nein... Könnt ihr mir helfen, wie erhält p1 die Adresse? Boah, wieso muss man es kompliziert machen, wenn es auch einfach geht... Danke |
Re: Eine verkettete Liste
Objektinstanzen sind automatisch Referenzen, Du musst also keinen extra Zeiger deklarieren oder zuweisen.
|
Re: Eine verkettete Liste
Boah... schon lange her die Zeiger :P
Vll. hilft dir das hier weiter: ![]() mfg Flö |
Re: Eine verkettete Liste
Oder hier mal schauen:
![]() Aber da werden wohl auch Records verwendet, das soll ja nicht. |
Re: Eine verkettete Liste
Zitat:
|
Re: Eine verkettete Liste
Wie sieht TElement denn aus? Das muss schon eine Klasse sein.
|
Re: Eine verkettete Liste
Ähhh, wie soll das denn ohne Record funktionieren?
Ein Feld für den Inhalt, ein Feld für den Zeiger zum nächsten Listenelement - das ist doch dann immer ein Record. Bei einer doppelt verketteten List käme noch ein Zeiger zum Vorgänger hinzu. |
Re: Eine verkettete Liste
wegen dem .Create.....
mfg Flö |
Re: Eine verkettete Liste
Zitat:
Delphi-Quellcode:
type
TLElement = class private rechts: TLElement; Data : Integer; public procedure setData(Daten: Integer); procedure setRechts(next: TLElement); function GetRechts:TLElement; end; |
Re: Eine verkettete Liste
Zitat:
|
Re: Eine verkettete Liste
Das muss kein Record sein, eine Klasse tut es auch und ich kann in dem Code keinen Fehler entdecken. Sollte doch einer auftreten, kriegst Du das dann schon mit ;)
|
Re: Eine verkettete Liste
vielleicht muss ich noch erwähnen, dass Delphi bei der Watch (nil, 0) für p1 angibt, also nicht nur NIL sondern auch der Wert für die Privatevariable Data in der Klasse TLElement
|
Re: Eine verkettete Liste
doppelpost
|
Re: Eine verkettete Liste
Dann übernimmt die Klasse aber genau die Funktion des Records. Ist vielleicht weniger OOP, aber eigentlich naheliegender...
|
Re: Eine verkettete Liste
Ich hab auch mal eine Art TObjectlist mit einer doppelt verketteten Liste implementiert, aber das war dann (spätestens beim Sortieren) ein Performance-Reinfall.
|
Re: Eine verkettete Liste
Tatsächlich? Hast du es mit Mergesort probiert?
|
Re: Eine verkettete Liste
Zitat:
|
Re: Eine verkettete Liste
Ehrlich gesagt, mit Quicksort. Da ich ja auf den Index zugreifen muss, wurde das eine ganz schöne Rennerei durch die referenzierten Objekte.
|
Re: Eine verkettete Liste
Auf dieser Website
![]() |
Re: Eine verkettete Liste
Du hast doch bereits im Ausgangspost einen vielversprechenden Ansatz geschrieben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr. |
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