queue.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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 x 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
  44. def check_remove(self, item):
  45. for (p, x) in self.queue:
  46. if item == x:
  47. self.queue.remove((p, x))
  48. def top_key(self):
  49. return self.queue[0][0]
  50. # class QueuePrior:
  51. # """
  52. # Class: QueuePrior
  53. # Description: QueuePrior reorders elements using value [priority]
  54. # """
  55. # def __init__(self):
  56. # self.queue = []
  57. # def empty(self):
  58. # return len(self.queue) == 0
  59. # def put(self, item, priority):
  60. # count = 0
  61. # for (p, x) in self.queue:
  62. # if x == item:
  63. # self.queue[count] = (priority, item)
  64. # break
  65. # count += 1
  66. # if count == len(self.queue):
  67. # heapq.heappush(self.queue, (priority, item)) # reorder x using priority
  68. # def get(self):
  69. # return heapq.heappop(self.queue)[1] # pop out the smallest item
  70. # def enumerate(self):
  71. # return self.queue
  72. # def check_remove(self, item):
  73. # for (p, x) in self.queue:
  74. # if item == x:
  75. # self.queue.remove((p, x))
  76. # def top_key(self):
  77. # return self.queue[0][0]