1. 程式人生 > >演算法:列隊的原理、使用及案例

演算法:列隊的原理、使用及案例

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='')