Priority queue: Difference between revisions

Content added Content deleted
(→‎{{header|C sharp}}: .NET 6 version)
(Add SenseTalk implementation)
Line 5,903: Line 5,903:
def compare(t1:Task, t2:Task):Int=t2.prio compare t1.prio
def compare(t1:Task, t2:Task):Int=t2.prio compare t1.prio
}</lang>
}</lang>

=={{header|SenseTalk}}==
We use New to create an object instance -- in this case (for simplicity) based on the script itself, which is named PriorityQueue. The Tell command or dot notation are then used to send messages directly to that object.
<lang sensetalk>
// PriorityQueue.script
set Tasks to a new PriorityQueue

tell Tasks to add 3,"Clear drains"
tell Tasks to add 4,"Feed cat"
tell Tasks to add 5,"Make tea"
tell Tasks to add 1,"Solve RC tasks"
tell Tasks to add 2,"Tax return"

put "Initial tasks:"
put Tasks.report & return

put Tasks.getTop into topItem
put "Top priority: " & topItem & return

put "Remaining:" & return & Tasks.report

------
properties
queue:[]
end properties

to add newPriority, newTask
repeat with each item of my queue
if newPriority comes before the priority of it then
insert {priority:newPriority, task:newTask} before item the counter of my queue
return
end if
end repeat
insert {priority:newPriority, task:newTask} into my queue -- add at end if last priority
end add

to getTop
pull my queue into firstItem
return firstItem
end getTop

to report
return (priority of each && task of each for each item of my queue) joined by return
end report
</lang>
{{out}}
<pre>
Initial tasks:
1 Solve RC tasks
2 Tax return
3 Clear drains
4 Feed cat
5 Make tea

Top priority: {priority:1, task:"Solve RC tasks"}

Remaining:
2 Tax return
3 Clear drains
4 Feed cat
5 Make tea
</pre>


=={{header|Sidef}}==
=={{header|Sidef}}==