Priority queue: Difference between revisions
Content added Content deleted
(→{{header|Rust}}: Added rust) |
|||
Line 2,969: | Line 2,969: | ||
Sleep |
Sleep |
||
Exercise</pre> |
Exercise</pre> |
||
=={{header|Phix}}== |
|||
Dictionary based solution. Allows duplicate tasks, FIFO within priority, and uses a callback-style method of performing tasks.<br> |
|||
Assumes 5 is the highest priority and should be done first, for 1 first just delete the ",true" on traverse_dict calls. |
|||
<lang Phix>integer tasklist = new_dict() |
|||
procedure add_task(integer priority, string desc) |
|||
integer k = getd_index(priority,tasklist) |
|||
if k=0 then |
|||
putd(priority,{desc},tasklist) |
|||
else |
|||
sequence descs = getd_by_index(k,tasklist) |
|||
putd(priority,append(descs,desc),tasklist) |
|||
end if |
|||
end procedure |
|||
function list_task_visitor(integer priority, sequence descs, integer /*user_data*/) |
|||
?{priority,descs} |
|||
return 1 |
|||
end function |
|||
procedure list_tasks() |
|||
traverse_dict(routine_id("list_task_visitor"), 0, tasklist,true) |
|||
end procedure |
|||
function pop_task_visitor(integer priority, sequence descs, integer rid) |
|||
string desc = descs[1] |
|||
descs = descs[2..$] |
|||
if length(descs)=0 then |
|||
deld(priority,tasklist) |
|||
else |
|||
putd(priority,descs,tasklist) |
|||
end if |
|||
call_proc(rid,{priority,desc}) |
|||
return 0 |
|||
end function |
|||
procedure pop_task(integer rid) |
|||
if dict_size(tasklist)!=0 then |
|||
traverse_dict(routine_id("pop_task_visitor"), rid, tasklist,true) |
|||
end if |
|||
end procedure |
|||
add_task(3,"Clear drains") |
|||
add_task(4,"Feed cat") |
|||
add_task(5,"Make tea") |
|||
add_task(1,"Solve RC tasks") |
|||
add_task(2,"Tax return") |
|||
procedure do_task(integer priority, string desc) |
|||
?{priority,desc} |
|||
end procedure |
|||
list_tasks() |
|||
?"===" |
|||
pop_task(routine_id("do_task")) |
|||
?"===" |
|||
list_tasks()</lang> |
|||
{{out}} |
|||
<pre> |
|||
{5,{"Make tea"}} |
|||
{4,{"Feed cat"}} |
|||
{3,{"Clear drains"}} |
|||
{2,{"Tax return"}} |
|||
{1,{"Solve RC tasks"}} |
|||
"===" |
|||
{5,"Make tea"} |
|||
"===" |
|||
{4,{"Feed cat"}} |
|||
{3,{"Clear drains"}} |
|||
{2,{"Tax return"}} |
|||
{1,{"Solve RC tasks"}} |
|||
</pre> |
|||
=={{header|PHP}}== |
=={{header|PHP}}== |