queue.py 1.4 KB

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