queue.py 1.3 KB

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