AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

einfach verkettete Liste

Ein Thema von malibu85 · begonnen am 31. Dez 2007 · letzter Beitrag vom 3. Jan 2008
Antwort Antwort
Seite 2 von 2     12   
malibu85

Registriert seit: 27. Dez 2007
45 Beiträge
 
#11

Re: einfach verkettete Liste

  Alt 1. Jan 2008, 15:33
Ein frohes neues Jahr wünsche ich euch,
ich habe mir erstaml das Videotutorial angeschaut welches mir wirklich eine Erleuchtung war. Sehr angenehm auf dieser Internetseite. Ich muss ganz ehrlich zugeben wenn man für so eine Hilfe geld zahlen müßte...ich würde es tun...großes lob auch an euch.

Ich habe die stelle an dem es um einfach verkettete Listen geht nach programmiert und glaube es auch soweit richtig zu haben. Im Prinzip läuft das Programm auch aber ich bekomme eine Fehlermeldung, welche ich erst ignorieren muss. Und zwar habe ich eine Zugriffsverletzung verursacht bei der Adresse 0453....

ich vermute das könnte vielleicht an den Hilfszeiger liegen (wrk bzw be mir work)
im ersten abschnitt erzeugen wir ein root. D.h. ein leeres Listenelement, welches als Markierer eigesetzt wird. Das Zeigerelement NEXT soll ja auf den Nachfolger zeigen aber bei root zeigt dieser ins NIL. Ist ja soweit okay. Danach fangen wir mit dem ersten Listenelement an und bezeichnen es als work- Work enthält den gleichen Inhalt wie root nur, dass work auch ein Nachfolger hat. Dann geht es los...mit der for-schleife werden die Nachfolger erzeugt. Alles soweit okay aber in der Ausgabe der Liste. definieren wir wieder einen Hilfszeiger der ach work heißt. Dieser bekommt die gleichen einstellungen wie der Markierer "root". root ist aber so zu sagen kein wirkliches Listenelement weil es keinen achfolger hat. Work ist ja das erste Listenelement. Bei der Ausgabe setzen wir work auf den Markierer. also ist worrk:=root; dann folgt eine schleife
Delphi-Quellcode:
while (work^.next<>NIL) do
begin
      Memo1.Lines.append(work^.inhalt);
      memo1.Lines.append(IntToStr(work^.Nummer));
      work:=work^.next;
end
Das verstehe ich nicht..wenn work =
root ist und root keinen Nachfolger hat wie soll man dann überhaupt auf de Pfad work^.inhalt kommen? denn work ist zwar mit root verknüpft am Anfang aber root ncht mit work. Okay das verstehe ich nicht so ganz. Sicher wird das auch nicht der Grund der Fehlermeldung sein aber kann es bei der Zugriffsverletung an den Hilfszeiger liegen?

hier noch mal der komplette Quellcode

Delphi-Quellcode:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Memo1: TMemo;
    procedure Button2Click(Sender: TObject);


    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

                           TYPE T_Zeiger = ^Liste;
                           Liste = Record
                           inhalt :string;
                           Nummer :integer;
                           next :T_Zeiger;
                           end;

var
  Form1: TForm1;

  root :T_Zeiger;
  Aktuell :T_Zeiger;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

  var
  work :T_Zeiger;
  I :Integer;
begin

  NEW(root);//-------------------------Erstes Listenelement erstellen root (Kopf)

      root^.next:=NIL;//---------------du hast keinen Nachfolger
      root^.inhalt:='Root-Element';//--root-Element enthält keine Daten
      root^.Nummer:=0;//---------------Nummer ist 0 da es nicht direkt zur Kette gehört sondern nur den Anfang markiert

      work:=root;//--------------------sagt nichts weiter aus, als das ein weiteres Element, die gleichen Inhalte trägt wie root..noch ist dieses Element nicht in der Liste


      for i:=1 to 10 do
      begin
      New(work^.next);//------------------------------ein neuer Speicherplatz für das neue Element wird erzeugt ..dem Nachfolger von ROOT
      work:=work^.Next;//-----------------------------auf das neu angelegte Element wechseln
      work^.inhalt:='Listenelement'+ IntToStr(i);//---Das Neue Element bekommt ein Inhalt
      work^.nummer:=i;//------------------------------Jedes Element erhält eine Nummer
      end;



end;






procedure TForm1.Button2Click(Sender: TObject);

var work:T_Zeiger;//------------------------------Hilfszeiger

begin

work:=root; //-----------------------------------------Hilfszeiger wird an den Anfang der Kette gesetzt

      while (work^.next<>NIL) do //--------------------Man hangelt sich so lange durch bis der Nachfolger NIL ist
      begin
      Memo1.Lines.append(work^.inhalt);
      memo1.Lines.append(IntToStr(work^.Nummer));
      work:=work^.next;

      end;

end;

end.
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#12

Re: einfach verkettete Liste

  Alt 1. Jan 2008, 15:59
sag mal, hast du dir mein beispiel angesehen? #8 das funktioniert und zeigt die verwendung einer verketteten liste. anlage, traverse und auflösung. das kannst prima als vorlage hernehmen um deine datenstruktur zu erweitern... aber die grundfunktionen bleiben das selbe.

vergleich mal dieses beispiel:
Delphi-Quellcode:
while AktNode <> NIL do
begin
  Writeln('Node mit Data: ', AktNode.data);
  AktNode := Traverse(Aktnode); //Geht zum nächsten Knoten
end;
mit deinem code...

Zitat von malibu85:
Delphi-Quellcode:
while (work^.next<>NIL) do
begin
      Memo1.Lines.append(work^.inhalt);
      memo1.Lines.append(IntToStr(work^.Nummer));
      work:=work^.next;
end
fällt dir da bspw. was auf? du travesierst die liste nur unzureichend... hier hätte deine while schleife so auszusiehen ... while work <> NIL do ... noch viel erfolg.
  Mit Zitat antworten Zitat
malibu85

Registriert seit: 27. Dez 2007
45 Beiträge
 
#13

Re: einfach verkettete Liste

  Alt 1. Jan 2008, 18:20
Dein Beispiel ist echt gut. Vor allem hat man dank den funktionen einen besseren Überblick. Sollte ich wieder Listen in einem Projekt einbinden müssen dann werde ich diese Vorlage verwenden. Ich hab boß immer so ne macke, dass es mir irgendwann gar nicht mehr darauf ankommt ne Liste zu programmieren sondern nur noch den Fehler zu finden, warum ein bestimmtes Projekt nicht funktioniert. Den Fehler von Oben also vom Videotutorial habe ich auch gefunden und zwar, wenn ich ein Listenelement mit daten fülle, dann muss für dieses Listenelement der "work^.next"-Zeiger wieder auf NIL gesetzt werden denn wenn ein neues Element eingefügt wird dann sucht sich das Programm diesen Zeiger und reserviert den Speicherplatz und wenn dort schon was drin steht gibts probleme. Wobei das kein Fehler vom Videotutorial war sondern von mir.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.646 Beiträge
 
Delphi 12 Athens
 
#14

Re: einfach verkettete Liste

  Alt 1. Jan 2008, 18:24
Mal eine dumme Frage: wieso muss es eigentlich eine verkettete Liste sein, wo man doch auch eine TList verwenden könnte?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
malibu85

Registriert seit: 27. Dez 2007
45 Beiträge
 
#15

Re: einfach verkettete Liste

  Alt 1. Jan 2008, 18:29
ja das ist so eie sache. wenn in der Klausur eine Aufgabe bekomme, programmieren sie eine verkettete Liste, dann macht sich das nicht so gut, wenn ich schreibe, ich nehme einfach TList
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.646 Beiträge
 
Delphi 12 Athens
 
#16

Re: einfach verkettete Liste

  Alt 1. Jan 2008, 18:31
Achso, dann will ich nichts gesagt haben
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#17

Re: einfach verkettete Liste

  Alt 1. Jan 2008, 19:32
und vor allem ist TList eine ArrayList. Würde also als Lösung zur Aufgabe nichtmal stimmen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#18

Re: einfach verkettete Liste

  Alt 3. Jan 2008, 16:05
Bei einer Verketteten Liste dürften auch die Einfüge und Lösch Proceduren schneller sein, als bei einem Array.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 19:52 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 by Thomas Breitkreuz