演算法:列隊的原理、使用及案例
阿新 • • 發佈:2018-12-04
Queue 是資料集合,僅允許在列表的一端插入,另一端刪除
性質:先進先出
程式碼實現
class Queue:
def __init__(self, size=100):
self.queue = [0 for _ in range(size)]
self.size = size
self.rear = 0 # 隊尾指標
self.front = 0 # 隊首指標
def push(self, element):
if not self.is_filled( ):
self.rear = (self.rear + 1) % self.size
self.queue[self.rear] = element
else:
raise IndexError("Queue is filled.")
def pop(self):
if not self.is_empty():
self.front = (self.front + 1) % self.size
return self.queue[self. front]
else:
raise IndexError("Queue is empty.")
# 判斷隊空
def is_empty(self):
return self.rear == self.front
# 判斷隊滿
def is_filled(self):
return (self.rear + 1) % self.size == self.front
q = Queue(5)
for i in range(4):
q.push(i)
print(q.pop())
q.push(4)
佇列內建模組
from collections import deque
# q = deque([1,2,3,4,5], 5)
# q.append(6) # 隊尾進隊
# print(q.popleft()) # 隊首出隊
# 用於雙向佇列
# q.appendleft(1) # 隊首進隊
# q.pop() # 隊尾出隊
def tail(n):
with open('test.txt', 'r') as f:
q = deque(f, n)
return q
for line in tail(5):
print(line, end='')