Skip to content

Commit 808c577

Browse files
committed
[Feature] Added changing priority queue task priority.
1 parent ecad94b commit 808c577

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

structures/priority_queue.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,21 @@ def add_task(self, task, priority=0):
1616
self.remove_task(task)
1717
count = next(self.counter)
1818
entry = [priority, count, task]
19-
self.mapper [task] = entry
19+
self.mapper[task] = entry
2020
heappush(self.pq, entry)
2121

2222
def remove_task(self, task):
2323
entry = self.mapper.pop(task)
2424
entry[-1] = self.REMOVED
25+
26+
def set_priority(self, task, priority=None):
27+
if task in self.mapper:
28+
entry = self.mapper.pop(task)
29+
30+
if not priority:
31+
priority = min(0, entry[0] - 1)
32+
33+
self.add_task(entry[2], priority)
2534

2635
def pop_task(self):
2736
while self.pq:

tests/test_priority_queue.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,25 @@ def test_pq_simple(self):
2121
self.assertEqual('park at work', pq.pop_task())
2222

2323
with self.assertRaises(KeyError):
24-
pq.pop_task()
24+
pq.pop_task()
25+
26+
def test_set_priority(self):
27+
pq = PriorityQueue()
28+
pq.add_task('drive to work', 2)
29+
pq.add_task('get keys')
30+
pq.add_task('load car', 1)
31+
pq.add_task('check gas', 1)
32+
pq.add_task('turn on car', 1)
33+
pq.add_task('park at work', 3)
34+
pq.remove_task('load car')
35+
pq.add_task('check gas', 1)
36+
37+
self.assertEqual('get keys', pq.pop_task())
38+
39+
pq.set_priority('park at work', 0)
40+
41+
self.assertEqual('park at work', pq.pop_task())
42+
43+
pq.set_priority('load car', 5)
44+
45+
self.assertEqual('turn on car', pq.pop_task())

0 commit comments

Comments
 (0)