Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verkettete Liste / Pointer , die Zweite (https://www.delphipraxis.net/2070-verkettete-liste-pointer-die-zweite.html)

VeeJay 5. Jan 2003 18:33


Verkettete Liste / Pointer , die Zweite
 
Hi Leute,
nachdem ihr mir vorher die Grundlagen der Pointer erklärt habt, habe ich mich jetzt an die "schwereren" Aufgaben getraut und wollte wissen, ob ich sie richtig gelöst habe / bzw. ob es bessere Lösungen gibt.

Aufgaben:
1.) Wie sieht die Zeigerkette beim Aufruf von Formcreate aus ?
2.) Was macht die Prozedur fuegean (erkläre ausführlich) ?
3.) Skizziere die Kette nach dem 1.Aufruf von fuegean !
4.) Wie sieht die fertige Kette aus ?
5.) Erkläre genau die Prozedur Button2click !
6.) Was erscheint in Edit2 als Text ?


Delphi-Quellcode:
unit Unit1;              //Zeigerverkettet

interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls,
      Forms, Dialogs,StdCtrls;

type TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Edit4: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
  public
  end;

var Form1: TForm1;

implementation
{$R *.DFM}
//-----------------------------------------------------
Type tzeiger=^element;
     element=Record
             inhalt:string;  next:tzeiger
             end;
Var kopf,hilf:tzeiger;
//-----------------------------------------------------

procedure TForm1.FormCreate(Sender: TObject);
begin  kopf:=NIL;  end;

procedure fuegean(s:string);
begin
  new (hilf);
  hilf^.inhalt:=s;
  hilf^.next:=kopf;
  kopf:=hilf;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
fuegean(edit1.text);
fuegean(edit2.text);
fuegean(edit3.text);
edit4.text:='ok Kette fertig';
end;

procedure TForm1.Button2Click(Sender: TObject);
Var hilf:tzeiger ; s:string;
begin
s:=kopf^.inhalt;
hilf:=kopf^.next;
s:=s+hilf^.inhalt;
hilf:=hilf^.next;
s:=s+hilf^.inhalt;
edit4.text:=s;
end;

end.
Meine Lösungen:
1.) Die Kette besteht aus einem Glied("kopf"), das keinen Inhalt hat und dessen Pointer auf NIL zeigt.
2.) Fuegean reserviert einen Platz im Speicher für das Kettenglied "Hilf". Diesem Kettenglied wird der Inhalt "s" zugeordnet, sowie ein Pointer auf das Kettenglied "Kopf". Daraufhin wird "Hilf" selbst zum "Kopf"
3.) kein Plan
4.) Die Kette besteht aus dem letzten Glied "Kopf(kein Inhalt/Zeiger auf NIL)" davor das Glied Hilf(edit3.text/Zeiger auf Kopf), davor wieder ein Hilf(edit2.text/Zeiger auf Hilf) und noch ein Hilf(edit1.text/Zeiger auf Hilf).
5.)Die Texte aus Edit 1-3 werden in umgekehrter Reihenfolge in Edit 4 herausgegeben.
6.)(Nehme an ein Fehler in der Aufgabenstellung / Edit 4 wäre sinnvoller, da Edit2 User-abhängig ist ;) ) In Edit 4 stehen die Texte der drei anderen Edit-Felder in folgender Reihenfolge edit3,edit2,edit1

Sooo, ich würde mich über jede Kritik zu meinen Lösungen freuen. Ihr könnt sie ruhig in der Luft zerreissen, denn für die Arbeit muss ich ja wissen, wie es richtig gemacht wird :angle2: .
Was mir selbst schon aufgefallen ist, ist das sich Aufgabe 5 und 6 irgendwie gleich anhören...

Viel Spass und vielen Dank
VeeJay

fiasko 5. Jan 2003 21:01

Hallo,

toll wie der Quelltext formatiert ist... und wie man jetzt Zeiger mit T am anfang schreibt... also mal ein paar Kommentare:

1.) Würde noch hinschreiben, das damit die Liste Leer ist.
2.) Wird also ein Element an die Liste vorne drann gesetzt.
3.) Der meint sowas:

Code:
          +--------+
kopf----->|  next--+----->(nil)
          +--------+
          | inhalt |
          +----+---+
               |
              \|/
          +----+-----------------------------------+
          |"was auch immer in Edit1.Text stand..." |
          +----------------------------------------+
(Strings sind ja auch Zeiger (seit Delphi 2.0), deswegen liegen die außerhalb des "Hauptkasten" - der ist sozusagen sein Record-Type)

4.) würde ich wie brei 3. in solchen Kästchen malen, hilf hat da nix zu suchen. Das ist ja nur ein Zeiger, der für die Liste unwichtig ist (wird ja nur beim einfügen kurz gebraucht). Du gehst jetzt natürlich davon aus, das jemand auf Button1 geklickt hat (und das die Events verknüpft sind, steht ja aber garnich in der Aufgabenstellung ;-) )

5.) jup
6.) *rotfl*

Soweit siehts doch ganz OK aus... viel Glück noch...


Thomas

Salomon 5. Jan 2003 21:09

@VeeJay: Kannst dir auch nochmal dein altes posting anschauen, dort habe ich einige der am meisten gebrauchten Proceduren im Zusammenhang mit verketten Listen gepostet.

VeeJay 5. Jan 2003 22:17

@fiasko: Danke für die Hilfe, die Sources sind bei uns standartmäßig so toll programmiert und formatiert :cry:
@salomon: Ich hatte deinen Post schon gelesen. Das sind bestimmt die Lösungen für Aufgaben, die in der Klausur kommen. Da kommt meistens Suchen, Einfügen und Löschen ;) Ist auf jeden Fall ne super Hilfe

Falls noch jemand anderes Verbesserungsvorschläge für meine Lösungen hat, einfach losposten !


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 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