定义
- 一个数据集合
- 仅允许在列表的一段进行插入,另一端进行删除
- 进行插入的一端——队尾(rear)——进队/入队
- 进行删除的一端——队头(front)——出队
- 队列的性质——先进先出
![![[1986c8ba10ac8ae356aba9b655570c34.png]]](https://i-blog.csdnimg.cn/blog_migrate/330b1089e8036e4a55a66542ed58e14a.png)
队列实现方式——环形队列
![![[2279140-20210901212744180-1891318942.png]]](https://i-blog.csdnimg.cn/blog_migrate/9150f5f31fbd449d8a6f8a3e976a896a.png)
- 队列大小为
n
n
n
- 进队——
(rear + 1) % n
- 出队——
(front + 1) % n
- 队空条件——
rear == front
- 队满条件——
(rear + 1) % n == front
队列的实现
class Queue:
def __init__(self,size=100):
self.queue = [0 for _ in range(size)]
self.rear = 0
self.front = 0
self.size = size
def push(self,element):
if not self.is_full():
self.rear = (self.rear + 1) % self.size
self.queue[self.rear] = element
else:
return 'Error'
def pop(self):
if not self.is_empty():
self.front = (self.front + 1) % self.size
return self.queue[self.front]
else:
return 'Error'
def is_empty(self):
return self.rear == self.front
def is_full(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()
q.append(i)
q.popleft()
q.pop()
q.appendleft(i)
双向队列
from collections import deque
q = deque()
for i in range(10):
q.append(i)
print(q.popleft())
print(q.popleft())
q.appendleft(100)
print(q.pop())
print(q.popleft())
q = deque([列表],最大的长度)
q2 = deque([1, 2, 3, 4, 5], 5)
q2.append(6)
print(q2.popleft())
打印文件后五行
from collections import deque
def tail(n):
with open('test.txt','r') as f:
q = deque(f,n)
return q
for i in tail(5):
print(i,end='')