Zitat von
sirius:
Wo tust du denn Queue.last setzen, bevor du Queue.last^ "aufrufst"?
bei der Initialisierung des Queues:
Delphi-Quellcode:
procedure RQEmpty(var Queue: TQueue);
begin
Queue.First := Nil;
Queue.Last := Queue.First;
end;
Zitat von
sirius:
Auch hier kann ich nur sagen, dass es auch TList gibt
was ich nicht verwenden darf.
//Edit
wenn ich deinen code verwende, bricht er zumindest nicht mehr ab. allerdings gibt er mir falsche werte aus, wenn ich mir das Front-Element anzeigen lassen möchte.
Wenn ich zum Beispiel den Queue damit fütter:
Delphi-Quellcode:
RQEmpty(MyQueue);
RQInsert(MyQueue, 5, 3);
RQInsert(MyQueue, 456, 99);
RQInsert(MyQueue, 9, 1);
RQInsert(MyQueue, 7, 5);
Writeln(RQFront(MyQueue));
sollte 456 rauskommen, allerdings kommt 5 raus.
Delphi-Quellcode:
function RQFront(Queue: TQueue): TValue;
var
HighestPrior: Integer;
begin
if RQIsEmpty(Queue) then
begin
Writeln('Error: Queue is empty');
Result := ErrorElem;
end
else if (Queue.First = Queue.Last) then
begin
Result := Queue.First.Value;
end
else
begin
HighestPrior := Queue.First.Priority;
Result := Queue.First.Value;
while (Queue.First <> Queue.Last) do
begin
Queue.First := Queue.First.Next;
if (HighestPrior < Queue.First.Priority) then
begin
HighestPrior := Queue.First.Priority;
Result := Queue.First.Value;
end;
end;
end;
end;
//Edit 2
Funktioniert jetzt alles wunderbar, war ein kleiner Fehler in der Front-Prozedur.