Priority queue: Difference between revisions

Content deleted Content added
Trizen (talk | contribs)
m →‎{{header|Sidef}}: replaced "each" with "for" loop
Added Elixir
Line 906: Line 906:
5:> Make tea
5:> Make tea
</pre>
</pre>

=={{header|D}}==
=={{header|D}}==
<lang d>import std.stdio, std.container, std.array, std.typecons;
<lang d>import std.stdio, std.container, std.array, std.typecons;
Line 951: Line 952:
; etc.
; etc.
</lang>
</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}}==
=={{header|Erlang}}==
Line 3,079: Line 3,123:
true.
true.
</pre>
</pre>

=={{header|PureBasic}}==
=={{header|PureBasic}}==
The priority queue is implemented using a binary heap array and a map.
The priority queue is implemented using a binary heap array and a map.
Line 3,455: Line 3,500:


>>> </lang>
>>> </lang>

=={{header|R}}==
=={{header|R}}==
Using closures:
Using closures: