| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- @author: Huiming Zhou
- @description: this file defines three kinds of queues that will be used in algorithms.
- """
- import collections
- import heapq
- class QueueFIFO:
- """
- Class: QueueFIFO
- Description: QueueFIFO is designed for First-in-First-out rule.
- """
- def __init__(self):
- self.queue = collections.deque()
- def empty(self):
- return len(self.queue) == 0
- def put(self, node):
- self.queue.append(node) # enter from back
- def get(self):
- return self.queue.popleft() # leave from front
- class QueueLIFO:
- """
- Class: QueueLIFO
- Description: QueueLIFO is designed for Last-in-First-out rule.
- """
- def __init__(self):
- self.queue = collections.deque()
- def empty(self):
- return len(self.queue) == 0
- def put(self, node):
- self.queue.append(node) # enter from back
- def get(self):
- return self.queue.pop() # leave from back
- class QueuePrior:
- """
- Class: QueuePrior
- Description: QueuePrior reorders elements using value [priority]
- """
- def __init__(self):
- self.queue = []
- def empty(self):
- return len(self.queue) == 0
- def put(self, item, priority):
- heapq.heappush(self.queue, (priority, item)) # reorder x using priority
- def get(self):
- return heapq.heappop(self.queue)[1] # pop out the smallest item
|