Priority queue: Difference between revisions

Added Elixir
m (→‎{{header|Sidef}}: replaced "each" with "for" loop)
(Added Elixir)
Line 906:
5:> Make tea
</pre>
 
=={{header|D}}==
<lang d>import std.stdio, std.container, std.array, std.typecons;
Line 951 ⟶ 952:
; etc.
</lang>
 
=={{header|Elixir}}==
{{trans|Erlang}}
<lang elixir>defmodule Priority do
def create, do: :gb_trees.empty
def insert( element, priority, queue ), do: :gb_trees.enter( priority, element, queue )
def peek( queue ) do
{_priority, element, _new_queue} = :gb_trees.take_smallest( queue )
element
end
def task do
items = [{3, "Clear drains"}, {4, "Feed cat"}, {5, "Make tea"}, {1, "Solve RC tasks"}, {2, "Tax return"}]
queue = Enum.reduce(items, create, fn({priority, element}, acc) -> insert( element, priority, acc ) end)
IO.puts "peek priority: #{peek( queue )}"
Enum.reduce(1..length(items), queue, fn(_n, q) -> write_top( q ) end)
end
def top( queue ) do
{_priority, element, new_queue} = :gb_trees.take_smallest( queue )
{element, new_queue}
end
defp write_top( q ) do
{element, new_queue} = top( q )
IO.puts "top priority: #{element}"
new_queue
end
end
 
Priority.task</lang>
 
{{out}}
<pre>
peek priority: Solve RC tasks
top priority: Solve RC tasks
top priority: Tax return
top priority: Clear drains
top priority: Feed cat
top priority: Make tea
</pre>
 
=={{header|Erlang}}==
Line 3,079 ⟶ 3,123:
true.
</pre>
 
=={{header|PureBasic}}==
The priority queue is implemented using a binary heap array and a map.
Line 3,455 ⟶ 3,500:
 
>>> </lang>
 
=={{header|R}}==
Using closures:
Anonymous user