Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
50
Task/Priority-queue/Lua/priority-queue-1.lua
Normal file
50
Task/Priority-queue/Lua/priority-queue-1.lua
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
PriorityQueue = {
|
||||
__index = {
|
||||
put = function(self, p, v)
|
||||
local q = self[p]
|
||||
if not q then
|
||||
q = {first = 1, last = 0}
|
||||
self[p] = q
|
||||
end
|
||||
q.last = q.last + 1
|
||||
q[q.last] = v
|
||||
end,
|
||||
pop = function(self)
|
||||
for p, q in pairs(self) do
|
||||
if q.first <= q.last then
|
||||
local v = q[q.first]
|
||||
q[q.first] = nil
|
||||
q.first = q.first + 1
|
||||
return p, v
|
||||
else
|
||||
self[p] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
},
|
||||
__call = function(cls)
|
||||
return setmetatable({}, cls)
|
||||
end
|
||||
}
|
||||
|
||||
setmetatable(PriorityQueue, PriorityQueue)
|
||||
|
||||
-- Usage:
|
||||
pq = PriorityQueue()
|
||||
|
||||
tasks = {
|
||||
{3, 'Clear drains'},
|
||||
{4, 'Feed cat'},
|
||||
{5, 'Make tea'},
|
||||
{1, 'Solve RC tasks'},
|
||||
{2, 'Tax return'}
|
||||
}
|
||||
|
||||
for _, task in ipairs(tasks) do
|
||||
print(string.format("Putting: %d - %s", unpack(task)))
|
||||
pq:put(unpack(task))
|
||||
end
|
||||
|
||||
for prio, task in pq.pop, pq do
|
||||
print(string.format("Popped: %d - %s", prio, task))
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue