![]() |
ADT-Liste Listenelement anhaengen
hy
ich hab eine ADT-Liste erstellt und hab nun ein Problem mit der Listenoperation element_anhaengen...
Delphi-Quellcode:
es werden irgendwie keine listen elemente angehängt
procedure anhaengen(element:integer;var liste:TRIngliste);
var neues:TZeiger; begin NEW(neues); neues^.inhalt:=element; neues^.naechster:=ringliste.erstes; if not (leer(liste)) then begin ringliste.letzte^.naechster:=neues; ringliste.letzte:=neues; ringliste.aktuelles:=neues; end else begin Ringliste.erstes:=neues; Ringliste.aktuelles:=neues; Ringliste.letzte:=neues; end; end; kann mir einner helfen? |
Re: ADT-Liste Listenelement anhaengen
Wieso hast du einen Übergabeparameter namens liste, wenn du doch auf der wohl globalen Variable ringliste rumreitest ?
Und wieso programmierst du eine ganz gewöhnliche procedure anhaengen anstatt aus TRIngliste eine Klasse zu machen ? |
Re: ADT-Liste Listenelement anhaengen
mh ok hat sich erledigt...lag am hauptprogramm und nicht an der unit adtliste..
die unit dürfte funktionieren..ich poste mal das ganze ding..
Delphi-Quellcode:
unit ADTRIngliste;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TInhalt=integer; TZeiger=^TElement; TElement=Record inhalt:TInhalt; naechster:TZeiger; end; TRingliste = Record erstes,aktuelles,letzte:TZeiger; end; procedure erzeugen(var liste:TRIngliste); procedure gehe_naechstes(var liste:TRIngliste); procedure anhaengen(element:integer;var liste:TRIngliste); procedure loeschen(var liste:TRIngliste); function leer(liste:TRIngliste):boolean; procedure gehe_erstes(var liste:TRIngliste); function hole(liste:TRIngliste):TInhalt; procedure SchreibeEintrag(var liste:TRingliste;inhalt:TInhalt); var Ringliste:TRingliste; implementation procedure erzeugen(var liste:TRIngliste); begin Ringliste.erstes:=NIL; Ringliste.aktuelles:=NIL; Ringliste.letzte:=NIL; end; function leer(liste:TRIngliste):boolean; begin if Ringliste.erstes=NIL then result:=true else result:=false; end; procedure gehe_erstes(var liste:TRIngliste); begin if not leer(liste) then Ringliste.aktuelles:=Ringliste.erstes else showmessage('Liste Leer'); end; Procedure gehe_naechstes(var liste:TRIngliste); begin if not (leer(liste)) then RIngliste.aktuelles:=Ringliste.aktuelles^.naechster else showmessage('Liste Leer'); end; function hole(liste:TRIngliste):TInhalt; begin if not (leer(liste)) then result:=ringliste.aktuelles^.inhalt else showmessage('Liste Leer'); end; procedure anhaengen(element:integer;var liste:TRIngliste); var neues:TZeiger; begin NEW(neues); neues^.inhalt:=element; neues^.naechster:=ringliste.erstes; if not (leer(liste)) then begin ringliste.letzte^.naechster:=neues; ringliste.letzte:=neues; ringliste.aktuelles:=neues; end else begin Ringliste.erstes:=neues; Ringliste.aktuelles:=neues; Ringliste.letzte:=neues; end; end; function davor(liste:TRingliste):TZeiger; var zeiger:TZeiger; begin if liste.aktuelles=liste.erstes then result:=NIL else begin zeiger:=liste.erstes; while zeiger^.naechster <> liste.aktuelles do zeiger:=zeiger^.naechster; end; result:=zeiger; end; procedure SchreibeEintrag(var liste:TRingliste;inhalt:TInhalt); begin if not(leer(liste)) then ringliste.aktuelles^.inhalt:=inhalt; end; procedure loeschen(var liste:TRingliste); var voraktuelles,blub:TZeiger; begin if not(leer(liste)) then begin if liste.erstes=liste.letzte then begin dispose(liste.aktuelles); liste.aktuelles:=NIL; liste.letzte:=NIL; liste.erstes:=NIL; end else if liste.aktuelles=liste.letzte then begin voraktuelles:=davor(liste); dispose(liste.letzte); liste.letzte:=voraktuelles; liste.letzte^.naechster:=liste.erstes; liste.aktuelles:=liste.erstes; end else if liste.aktuelles=liste.erstes then begin liste.aktuelles:=liste.aktuelles^.naechster; dispose(liste.erstes); liste.erstes:=liste.aktuelles; liste.aktuelles:=liste.erstes; end else begin voraktuelles:=davor(liste); blub:=liste.aktuelles^.naechster; dispose(liste.aktuelles); liste.aktuelles:=blub; voraktuelles^.naechster:=liste.aktuelles; end; end; end; end. |
Re: ADT-Liste Listenelement anhaengen
Zitat:
Alle deine Funktionen haben einen Übergabeparameter var liste:TRIngliste. Aber du benützt den Übergabeparameter nicht. :( Stattdessen verwendest du immer die globale Variable Ringliste. |
Re: ADT-Liste Listenelement anhaengen
und wie wär es besser? soll ich var:liste etc.. rauslassen?
ich verwende ja die unit in meinem hauptprogramm..müssen sich da die proceduren nicht auf die liste beziehen... |
Re: ADT-Liste Listenelement anhaengen
Zitat:
Angenommen du willst zwei Listen haben. Du würdest also schreiben:
Delphi-Quellcode:
So und jetzt schau dir mal deine Prozeduren an!
var
ListeA, ListeB : TRIngliste; ... erzeugen(ListeA); erzeugen(ListeB); anhaengen(42, ListeA); anhaengen(66, ListeB);
Delphi-Quellcode:
Und das gilt nicht nur für "erzeugen", sondern für alle deine Prozeduren.
procedure erzeugen(var liste:TRIngliste);
begin { FALSCH Ringliste.erstes:=NIL; Ringliste.aktuelles:=NIL; Ringliste.letzte:=NIL; } // Richtig liste.erstes:=NIL; liste.aktuelles:=NIL; liste.letzte:=NIL; end; Du solltest deine globale Variable Ringliste auskommentieren. |
Re: ADT-Liste Listenelement anhaengen
achso..gut jetzt hats klick gemacht...ich werds überarbeiten..
danke für deine hilfe :thumb: :thumb: :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 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