队列——python

本文介绍了队列的数据结构概念,重点讲解了环形队列的定义、队列的性质以及使用Python的deque模块实现双向队列。还展示了如何用队列处理文件操作,如打印文件后五行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

  • 一个数据集合
  • 仅允许在列表的一段进行插入,另一端进行删除
  • 进行插入的一端——队尾(rear)——进队/入队
  • 进行删除的一端——队头(front)——出队
  • 队列的性质——先进先出
    ![[1986c8ba10ac8ae356aba9b655570c34.png]]

队列实现方式——环形队列

![[2279140-20210901212744180-1891318942.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)         # 队尾进队  
#  [0,1,2,3,4,5,6,7,8,9]  
print(q.popleft())      # 队首出队  
#  [1,2,3,4,5,6,7,8,9]  
print(q.popleft())  
#  [2,3,4,5,6,7,8,9]  
q.appendleft(100)       # 队首进队  
#  [100,2,3,4,5,6,7,8,9]  
print(q.pop())          # 队尾出队  
#  [100,2,3,4,5,6,7,8]  
print(q.popleft())  
#  [2,3,4,5,6,7,8]

q = deque([列表],最大的长度)

  • 队满了,前面的自动出队
q2 = deque([1, 2, 3, 4, 5], 5)  
#  [1,2,3,4,5]  
q2.append(6)  
#  [2,3,4,5,6]  
print(q2.popleft())     # 2

打印文件后五行

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='')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值