Files
PathPlanning/Search-based Planning/Search_2D/queue.py
T

63 lines
1.3 KiB
Python
Raw Normal View History

2020-06-16 14:04:55 -07:00
import collections
import heapq
2020-06-21 21:50:11 -07:00
2020-06-20 19:12:34 -07:00
class QueueFIFO:
"""
2020-06-16 14:04:55 -07:00
Class: QueueFIFO
Description: QueueFIFO is designed for First-in-First-out rule.
2020-06-20 19:12:34 -07:00
"""
2020-06-16 14:04:55 -07:00
def __init__(self):
self.queue = collections.deque()
def empty(self):
return len(self.queue) == 0
def put(self, node):
2020-06-21 21:50:11 -07:00
self.queue.append(node) # enter from back
2020-06-16 14:04:55 -07:00
def get(self):
2020-06-21 21:50:11 -07:00
return self.queue.popleft() # leave from front
2020-06-16 14:04:55 -07:00
2020-06-20 19:12:34 -07:00
class QueueLIFO:
"""
2020-06-16 14:04:55 -07:00
Class: QueueLIFO
Description: QueueLIFO is designed for Last-in-First-out rule.
2020-06-20 19:12:34 -07:00
"""
2020-06-16 14:04:55 -07:00
def __init__(self):
self.queue = collections.deque()
def empty(self):
return len(self.queue) == 0
def put(self, node):
2020-06-21 21:50:11 -07:00
self.queue.append(node) # enter from back
2020-06-16 14:04:55 -07:00
def get(self):
2020-06-21 21:50:11 -07:00
return self.queue.pop() # leave from back
2020-06-16 14:04:55 -07:00
2020-06-20 19:12:34 -07:00
class QueuePrior:
"""
2020-06-16 14:04:55 -07:00
Class: QueuePrior
Description: QueuePrior reorders elements using value [priority]
2020-06-20 19:12:34 -07:00
"""
2020-06-16 14:04:55 -07:00
def __init__(self):
self.queue = []
def empty(self):
return len(self.queue) == 0
def put(self, item, priority):
2020-07-02 10:24:23 -07:00
heapq.heappush(self.queue, (priority, item)) # reorder x using priority
2020-06-16 14:04:55 -07:00
def get(self):
2020-06-21 21:50:11 -07:00
return heapq.heappop(self.queue)[1] # pop out the smallest item
2020-06-25 17:59:40 -07:00
def enumerate(self):
return self.queue