AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Pointer auf das erste Element einer Liste
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer auf das erste Element einer Liste

Ein Thema von czapie · begonnen am 2. Mär 2003 · letzter Beitrag vom 5. Mär 2003
Antwort Antwort
czapie

Registriert seit: 17. Nov 2002
Ort: Berlin
384 Beiträge
 
Delphi 5 Standard
 
#1

Pointer auf das erste Element einer Liste

  Alt 2. Mär 2003, 20:13
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]
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#2
  Alt 2. Mär 2003, 21:39
Was für eine Liste?
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3
  Alt 2. Mär 2003, 21:54
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;
  Mit Zitat antworten Zitat
czapie

Registriert seit: 17. Nov 2002
Ort: Berlin
384 Beiträge
 
Delphi 5 Standard
 
#4

danke

  Alt 3. Mär 2003, 08:28
Oh Mann,

danke, ich glaub ich habs schwer verwundet überlebt,

Czapie.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5
  Alt 5. Mär 2003, 09:53
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz