queue.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. count = 0
  40. for (p, x) in self.queue:
  41. if x == item:
  42. self.queue[count] = (priority, item)
  43. break
  44. count += 1
  45. if count == len(self.queue):
  46. heapq.heappush(self.queue, (priority, item)) # reorder x using priority
  47. def get(self):
  48. return heapq.heappop(self.queue)[1] # pop out the smallest item
  49. def enumerate(self):
  50. return self.queue