queue.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. class QueueFIFO:
  10. """
  11. Class: QueueFIFO
  12. Description: QueueFIFO is designed for First-in-First-out rule.
  13. """
  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. class QueueLIFO:
  23. """
  24. Class: QueueLIFO
  25. Description: QueueLIFO is designed for Last-in-First-out rule.
  26. """
  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. class QueuePrior:
  36. """
  37. Class: QueuePrior
  38. Description: QueuePrior reorders elements using value [priority]
  39. """
  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