queue.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. flag = 0
  40. count = 0
  41. for (p, x) in self.queue:
  42. if x == item:
  43. self.queue[count] = (priority, item)
  44. flag = 1
  45. break
  46. count += 1
  47. if flag == 0:
  48. heapq.heappush(self.queue, (priority, item)) # reorder x using priority
  49. def get(self):
  50. return heapq.heappop(self.queue)[1] # pop out the smallest item
  51. def enumerate(self):
  52. return self.queue
  53. def remove(self, item):
  54. for x in self.queue:
  55. if item == x[1]:
  56. self.queue.remove(x)
  57. def top_key(self):
  58. return self.queue[0][0]