Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
47
Task/Priority-queue/Pascal/priority-queue-4.pas
Normal file
47
Task/Priority-queue/Pascal/priority-queue-4.pas
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
program PqDemo;
|
||||
{$mode delphi}
|
||||
uses
|
||||
SysUtils, PQueue;
|
||||
|
||||
type
|
||||
TTask = record
|
||||
Name: string; Prio: Integer;
|
||||
end;
|
||||
|
||||
const
|
||||
Tasks: array of TTask = [
|
||||
(Name: 'Clear drains'; Prio: 3), (Name: 'Feed cat'; Prio: 4),
|
||||
(Name: 'Make tea'; Prio: 5), (Name: 'Solve RC tasks'; Prio: 1),
|
||||
(Name: 'Tax return'; Prio: 2)];
|
||||
|
||||
function TaskCmp(const L, R: TTask): Boolean;
|
||||
begin
|
||||
Result := L.Prio < R.Prio;
|
||||
end;
|
||||
|
||||
var
|
||||
q: TPriorityQueue<TTask>;
|
||||
h: q.THandle = q.NULL_HANDLE;
|
||||
t: TTask;
|
||||
MaxPrio: Integer = Low(Integer);
|
||||
begin
|
||||
Randomize;
|
||||
q := TPriorityQueue<TTask>.Create(@TaskCmp);
|
||||
for t in Tasks do begin
|
||||
if t.Prio > MaxPrio then MaxPrio := t.Prio;
|
||||
if Pos('cat', t.Name) > 0 then
|
||||
h := q.Push(t)
|
||||
else
|
||||
q.Push(t);
|
||||
end;
|
||||
if (h <> q.NULL_HANDLE) and Boolean(Random(2)) then begin
|
||||
WriteLn('Cat is angry!');
|
||||
t := q.GetValue(h);
|
||||
t.Prio := Succ(MaxPrio);
|
||||
q.Update(h, t);
|
||||
end;
|
||||
WriteLn('Task list:');
|
||||
while q.TryPop(t) do
|
||||
WriteLn(' ', t.Prio, ' ', t.Name);
|
||||
q.Free;
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue