![]() |
Pointer auf das erste Element einer Liste
AAaaah Hilfe!
Ich weiß hier im Forum wurden Listen schon ein paar mal behandelt, aber ich bin nicht so richtig schlau daraus geworden. Mein Problem ist das ich nicht weiß wie ich zum Anfang einer Liste komme, also den Pointer auf das erste Element setze, bitte helft mir! Sonst müßt ihr morgen ein Forum-Mitglied zu Grabe tragen, dass von einem wutschaubenden Informatiklehrer erschlagen wurde, danke, Czapie. [edit=Daniel B]Titel geändert. Bitte das nächste mal etwas aussagekräftiges eingeben, nicht Hiiilfe! Ausserdem zweites Posting gelöscht! MfG Daniel B.[/edit] |
Was für eine Liste?
|
Er er von "den Pointer auf das erste Element setze" schreibt, muss man wohl von verketteten Listen ausgehen. Nun kommt es noch daran an, ob eine einfach oder mehrfach verkettete Liste gemeint ist.
Einfach:
Delphi-Quellcode:
type
PListe = ^TListe; TListe = record Next: PListe; Data: Integer; end; var Root: PListe; // Zeigt immer auf das erste Element procedure AddItem(Data: Integer); var p, Node: PListe; begin New(p); // neues Element erzeugen p^.Next := nil; // wird als letztes Element in die Liste eingefügt p^.Data := Data; if Root = nil then begin // noch nichts in der Liste, dann wird die Liste das neue Element selbst Root := p; end else begin // Neues Element ganz hinten hinzufügen. Dazu muss die gesamte // Liste durchlaufen werden Node := Root; while (Node^.Next <> nil) do Node := Node^.Next; Node^.Next := p; // Dem letzten Element als nächstes das neue hinzufügen end; end; procedure DeleteItem(Data: Integer); var Node, PreNode: PListe; begin if Root = nil then Exit; // nichts was man löschen könnte vorhanden if Root^.Data = Data then begin // Das 1. Element muss gelöscht werden Node := Root^.Next; // Zeiger auf das nächste Element sichern Dispose(Root); // 1. Element freigeben Root := Node; // und neues 1. Element festlegen end else begin PreNode := Root; // vorheriges Element Node := Root^.Next; // zu prüfendes Element while (Node <> nil) do begin if Node^.Data = Data then begin PreNode^.Next := Node^.Next; // Node aus der Liste entfernen Dispose(Node); // Node freigeben Break; // und Löschvorgang beenden end; PreNode := Node; Node := Node^.Next; end; end; end; |
danke
Oh Mann,
danke, ich glaub ich habs schwer verwundet überlebt, Czapie. |
Hi,
schau Dir mal das Object TLIst in der Hilfe an ! Das ist eine fertige Zeigerliste, wo Du jeden X-belibigen Zeiger ablegen kannst. Näturlich mußt DU Dich noch um das reservieren und freigeben vom Speicher kümmern. WEnn Du Objekte in einer Liste speichern möchtest, empfehle ich Dir TObjectList, welche sich auch noch um die Speicherverwaltung kümmert. Data |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:55 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