Einzelnen Beitrag anzeigen

knocko

Registriert seit: 9. Jun 2008
14 Beiträge
 
#1

Problem mit doppelt Verkettete Liste - Zeiger - Wie? ^^

  Alt 17. Nov 2008, 11:14
Hi Leute, ich hoffe ich bin hier im richtigen Forum.
Hoffe doch dass Zeiger zum ObjectPascal gehören.

Also mein Problem konnte Google nicht lösen.
Fast jeder Google-Link ist schon mit lilaner Farbe gekennzeichnet
Dazu kommt noch,dass mein Desktop jetzt mit haufen Beispielen und PDFs zugemüllt ist.
Nur nix davon bringt mich wirklich weiter.

Aber nun genug Offtopic.
Mein Problem ist folgendes:
Ich hab mir einen Zeiger definiert:
Code:
type
  PMyelement = ^TMyelement;
  TMyelement = record                                
           id: integer;
           titel: string;
           Next : PMyelement;
           Prev : PMyelement;
Dann kommen die globalen Variablen
Code:
var
  anf, akt, ende : PMyelement;                            { ** anf und akt stehen für Anfang und Aktuell ** }

Bis dahin kein Problem.
Jetzt (ich hoffe ich kriegs gut erklärt) möchte ich meinen Quelltext folgdendermaßen schreiben:
Das Einschreiben von Daten funktioniert schon.
Allerdings fügt er neue Elemente immer ganz hinten an.
Sagen wir aber ich befinde mich in der Mitte der Datensätze (die ich mit Hilfe von Vorwärts/Rückwärts-Buttons erreicht habe) und klicke nun auf "Übernehmen".
Dann soll er in dem aktuellen Datensatz nur die Daten "aktualisieren" und nicht hinten erneut speichern.
Anschließend soll er mir den nächsten Datensatz einfach anzeigen lassen.

Ich weiß ja auch warum er die Daten am Ende speichert, aber ich krieg diesen Fehler gedanklich nicht ausgemerzt!
Es fehlt mir irgendwo ne If-Abfrage die überprüft, ob der Zeiger nun am Ende des Datensatzes ist (sprich "nächste Datensatz := NIL")
oder ob da noch Datensätze folgen (sprich "nächste Datensatz <> NIL")
Ich hoffe einfach mal,dass die Beschreibung ausreicht für euch. Wenn es fragen gibt immer her damit!



Hier mein Quelltext zum Eintragen von Daten:
Code:
procedure TForm1.BitBtn3Click(Sender: TObject);    // Elemente einschreiben in Liste
var h1, h2 : PMyelement;   { ** h1 und h2 sind (H)ilfsvariablen ** }
begin
  new(h1);
  h1^.id := StrToInt(Edit1.Text) +1;
  h1^.titel := Edit2.Text;
  Edit1.Text := IntToStr(h1^.id);
  h1^.Next := NIL;
  if anf = NIL then
    begin
      anf := h1;
    end
  else
    begin
       h2 := anf;
       while (h2^.Next <> NIL) do
         begin
           h2 := h2^.Next;
         end;
       h2^.Next := h1;
     end;
  akt := h1;
end;

lg knocko
  Mit Zitat antworten Zitat