Lazarus/Delphie doppelt verkettete Listen - wer kann mir das erklären?

2 Antworten

Puh...ich hoffe mal, ich bekomme die Syntax noch korrekt zusammen, wenn nicht, bitte ich um Verzeihung ;-)

Erstmal das Grundkonzept: Jedes Objekt ist in einem Knoten hinterlegt. Dazu liegt auch je ein Pointer für den Vorgänger- und Nachfolgerknoten.

Das sieht dann ungefähr so aus:

Type
  TNodePtr = ^TNode;
  TNode = Record
    Data : int
    Prev : TNodePtr
    Next : TNodePtr
  End;

Wenn deine Liste nur aus einem Knoten besteht, ist Prev und Next jeweils nil.

Willst du den ersten Knoten der Liste finden, gehst du von einem beliebigen Knoten immer zu Prev, solange bis Prev nil ist, das ist dann das erste Element. Den letzten Knoten findest du auf die gleiche Art und Weise (nur eben mit Next).

Um einen neuen Knoten in eine Liste einzufügen hast du 2 Optionen: Vor dem aktuellen Knoten oder danach.
Sei der aktuelle Knoten 'CurrentNode' und der neue Knoten 'NewNode' und du willst davor einfügen. Dann musst du nur folgendes tun:

NewNode.Prev := CurrentNode.Prev;
NewNode.Next := @CurrentNode;
CurrentNode.Prev := @NewNode;

Ich bin ziemlich sicher, das die Syntax, insbesondere der Pointerarithmetik falsch ist (habe 15 Jahre nix mehr mit Delphi gemacht). Das sollte die Grundidee allerdings trotzdem ausreichend darstellen

Dahinter einfügen ist dann genau das gleiche (mit Next und Prev vertauscht).

Pascal: Taschenrechner und IF?

Hey. Ich programmiere gerade einen Taschen rechner mit der Programmiersprache Pascal und ich habe folgende probleme. 1. Wie macht man es so (insgesamt gibt es nur ein label für alles), dass man auf eine Kommastelle des ergebnisses rundet?Also befehle wie roundto was ich in google oft gesehen hab funktionieren nicht. 2.Wie macht man es das unentliche Zahlenketten berechnet werden können(also sowas wie 2+5+3+53+5+23) und wie macht man das, dass auch punkt vor strich beachtet wird? 3.Ist es möglich,dass man sogesehen programmiert: Wenn string1 gesetzt wurde, dann wird + gerechnet.

Prinzip meines Taschenrechners: Ein Label ist für die zahlen und die lösung (kann nicht geändert werden). Wenn ich die erste zahl eingebe und dann einen opperator drücke wird diese in einem string gespeichert und Label1,Caption ist leer. Zum Beispiel beim Plus rechnen ist es dann wenn ich " gleich " drücke : Label1.Caption:=floattostr(strtofloat(label1.caption)+strtofloat(string1));. Danke im Vorraus^^

...zur Frage

Delphi von Form 1 auf Form 2 umspringen

Hallo liebe Community, Ich möchte in Lazarus von Form 1 auf Form 2 umspringen. Ich hab das so gemacht: Implementation uses Form2; dann kommt aber diese Fehlermeldung: Illegal Expression

Ich bin Ratlos

LG ED

...zur Frage

Lazarus Problem - sonderbare .lpi Datei?

Hallo also ich habe anscheinend etwas verstellt, mit welchen Programm ich welche Dateien öffne. Nun kommt immer folgende Fehlermeldung wenn ich die LPS, Lazarus Project Information und Lazarus Project Main Source öffne: Sonderbare .lpi-Datei Die Datei ...\project1.lpi sieht nicht aus wie eine lpi-Datei. Abbruch Übergehen

Gehe ich auf Abbruch öffnet sich mehr oder weniger die Datei, ich kann diese Datei aber nicht mehr kompilieren lassen. Bei übergehen fehlen dann unit und Quelltext.

Ich hoffe jemand weiß etwas darüber und kann mir helfen.

...zur Frage

Lazarus Exponent Rechner Problem

Hay,

Ich hab ein Programm geschrieben zum üben für die Schule aber ich hab ein Fehler keine Ahnung wo hab schon die ganze zeit gesucht aber finde nichts....

Hier ein Bild: http://i.epvpimg.com/I0xie.png

Wenn ich zum Beispiel eine Zahl nehme "2" dann mit dem Exponenten "1" nehmen will.... kommt da 4 heraus obwohl da 2 kommen muss irgendwas ist falsch aber ich bin zu dumm um es zu finden ^^

bitte helfen dankeeeee bekommt auch ein stern

...zur Frage

Was möchtest Du wissen?