![]() |
Stack - erstes Element löschen
Hallo liebe DP! :)
Ich sitz gerade wieder vor einem Problem mit meinem Stack. Ich möchte das letzte Element eines Stapel löschen... Ich habe mir dafür eine Variable Hilf angelegt, die auf den Anfang des Stapels zeigt, damit ich den nicht verliere. Ich möchte den Stapel mit einer Schleife durchlaufen und das letzte Element dann disposen. Das Blöde hier dran ist nur, dass meine While-Schleife einfach nie zu Ende geht. Sie rattert pausenlos durch, was eine CPU-Auslastung von 100 % zur Folge hat. :gruebel:
Delphi-Quellcode:
Die Prozedur ist in einer anderen Unit nur für Stapelprozeduren. Der Stapel wird durch den Parameter übergeben. Der Stapel wird beim Formcreate auf nil gesetzt.
procedure letztesloeschen(AStapel:PStapel);
var Hilf,temp:PStapel; begin Hilf:= AStapel; While AStapel <> nil do temp:= AStapel^.next; Dispose(temp); AStapel:= Hilf; end; Ich hoffe ihr könnt mir helfen :) |
Re: Stack - letztes Element löschen
Das letzte ist beim Stack doch das erste.
|
Re: Stack - letztes Element löschen
Da hast du natürlich Recht. Dann habe ich mich vielleicht falsch ausgedrückt. Ich will das erste Element entfernen. Praktisch das Element, das auf nil zeigt.
|
Re: Stack - letztes Element löschen
Hallo!
Ich möchte nur mal anmerken, dass du eine Endlosschleife hast ;)
Delphi-Quellcode:
Es ändert sich doch rein gar nichts an der Schleifenbedingung, wenn du temp etwas zuweist -> sprich Endlosschleife.
While AStapel <> nil do temp:= AStapel^.next;
|
Re: Stack - letztes Element löschen
Es sollte doch .Prior sein oder?
|
Re: Stack - letztes Element löschen
und wie löse ich das Problem? :?
Der Stapel zeigt doch irgendwann auf nil. Nämlich dann, wenn das erste Element erreicht worden ist... Oder ist das nicht richtig? :gruebel: @mkinzler: was heißt .Prior? |
Re: Stack - letztes Element löschen
Ich würde den Vorgänger (.Next) nicht Nachfolger (.Prior) nennen. Ist zwar egal, verwirrt aber.
Delphi-Quellcode:
While AStapel^.next <> nil
|
Re: Stack - letztes Element löschen
deine Lösung klappt nicht... ist trotzdem Endlos :?
Ich habe jetzt mal versucht, AStapel:= AStapel^.Next (
Delphi-Quellcode:
) zu setzen. Aber das geht auch nicht, da es eine Adressverletzung sei. Bin echt ratlos...
While AStapel <> nil do AStapel:= AStapel^.next;
|
Re: Stack - letztes Element löschen
Bist du sicher, dass das Root-Element auf Nil zeigt
|
Re: Stack - letztes Element löschen
Ich setze den Stapel beim FormCreate auf nil. Der ganze Stapel sieht dann wie folgt aus:
Stapel -> nil (leerer Stapel) nach Hinzufügen des ersten Elementes: Stapel -> [Element 1] -> nil nach Hinzufügen eines weiteren Elementes: Stapel -> [Element 2] -> [Element 1] -> nil ... UPDATE: ich habs jetzt soweit hinbekommen, dass ich das letzte Element gelöscht hab (dispose). Das Problem an der Sache ist ja jetzt, dass das jetzt Letzte bzw. das vorher vorletzte immer noch auf das gelöschte zeigt. Das geht ja natürlich nicht. Deshalb gibts eine Fehlermeldung. edit: oh, danke Eddy :) eine Frage dazu: bei Stapel^.next^.next rufst du das übernächste Element auf? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 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