queue.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @author: Huiming Zhou
  5. """
  6. import collections
  7. import heapq
  8. class QueueFIFO:
  9. """
  10. Class: QueueFIFO
  11. Description: QueueFIFO is designed for First-in-First-out rule.
  12. """
  13. def __init__(self):
  14. self.queue = collections.deque()
  15. def empty(self):
  16. return len(self.queue) == 0
  17. def put(self, node):
  18. self.queue.append(node) # enter from back
  19. def get(self):
  20. return self.queue.popleft() # leave from front
  21. class QueueLIFO:
  22. """
  23. Class: QueueLIFO
  24. Description: QueueLIFO is designed for Last-in-First-out rule.
  25. """
  26. def __init__(self):
  27. self.queue = collections.deque()
  28. def empty(self):
  29. return len(self.queue) == 0
  30. def put(self, node):
  31. self.queue.append(node) # enter from back
  32. def get(self):
  33. return self.queue.pop() # leave from back
  34. class QueuePrior:
  35. """
  36. Class: QueuePrior
  37. Description: QueuePrior reorders elements using value [priority]
  38. """
  39. def __init__(self):
  40. self.queue = []
  41. def empty(self):
  42. return len(self.queue) == 0
  43. def put(self, item, priority):
  44. heapq.heappush(self.queue, (priority, item)) # reorder x using priority
  45. def get(self):
  46. return heapq.heappop(self.queue)[1] # pop out the smallest item