问题描述
队列(Queue)是一个数据集合,仅允许在列表的一端进行插入,另一端进行删除。
进行插入的一端称为队尾(rear),插入动作称为进队或入队。
进行删除的一端称为队头(front),删除动作称为出队。
队列的性质:先进先出(First-in,First-out)
class Queue:
def __init__(self, size = 10):
self.queue = [0 for _ in range(size)]
self.size = size
self.rear = 0 #队尾指针
self.front = 0 #队首指针
def push(self, element):
self.rear = (self.rear + 1) % self.size
self.queue[self.rear] = element
def pop(self):
if not self.is_empty():
self.front = (self.front + 1) % self.size
return self.queue[self.front]
else:
return None
def is_empty(self):
return self.rear == self.front
def filled(self):
return (self.rear + 1) % self.size == self.front
Q = Queue()
Q.push(2)
print(Q.pop())
from collections import deque
q = deque()
q.append(1) #从右边加
print(q.popleft()) #从左边pop
q.appendleft(3) #从左边队首进队
print(q.pop())
U = deque([1,0,4,5,6], 5)
U.append(8) #从左边pop
print(U.popleft()) #只输出最左边的
def tail(n): #查看最后n行
with open('test.txt', 'r') as f:
q = deque(f, n) #进队后超出范围,将最开时的元素出队
return q
with open('test.txt', 'r') as f:
# 循环读取文件的前5行
for i in range(30):
line = f.readline()
print(line, end='')
for line in tail(5):
print(line, end='')
自建文件test.txt
adfa
fadf
fafr
fre
rfr
rfg
gt
rgwgw
rgw
grr
结果展示
2
1
3
0
adfa
fadf
fafr
fre
rfr
rfg
gt
rgwgw
rgw
grrrfg
gt
rgwgw
rgw
grr