《python全栈工程师 - 数据结构与算法》:队列

一、课程目标

队列的概念
队列的Python实现

二、详情解读

1.什么是队列:队列是一种线性表

1.队列从尾部插入、从头部弹出
2.队列的数据访问遵从FIFO(first-in first-out)协议
3.出了基本队列结构以外还有双向队列和优先队列

在这里插入图片描述

2.队列的Python实现

方法说明
q.isEmpty()队列是否为空
q.__ len __()队列中的项目数
q.put()在队列压入一项
q.get()如果q不为空,返回并删除第一项,否则抛出错误EmptyError

队列的实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
链表实现队列

使用链表实现队列,从链表首部压入或尾部弹出
需要设定一个尾部标志
时间复杂度为O(1)
在这里插入图片描述

2.Python的内置队列(queue模块与collections.deque)

queue.Queue-FIFO队列
queue.LifoQueue-LIFO队列
queue.PriorityQueue-优先级队列
queue.deque(collections.deque)-双向队列

队列中常用的方法

方法说明
q.empty()队列是否为空
q.qsize()队列中的项目数
q.full()队列是否已满
q.put()插入数据,如果队列已满,阻塞到可以插入
q.get()如果q不为空,返回并删除第一项,否则阻塞到有数据到止
q.put_nowait()插入数据,如果队列已满,返回错误异常
q.get_nowait()获得数据,如果队列为空,返回错误异常
q.task_done()队列消费者用来指示对于项的处理已经结束
q.join()阻塞到队列中所有的项均被删除或者已处理
from queue import Queue
from queue import LifoQueue
from queue import deque

q=Queue()
q.put('A')
q.put('B')
q.put('C')

print('FIFO 队列',q.queue)

while not q.empty():
    print(q.get())
    print('*'*100)

print('FIFO 队列',q.queue)
print('-'*100)

lifo_queue=LifoQueue()

lifo_queue.put('A')
lifo_queue.put('B')
lifo_queue.put('C')

print('LIFO 队列',lifo_queue.queue)

while not lifo_queue.empty():
    print(lifo_queue.get())
    print('*'*100)

print('LIFO 队列',lifo_queue.queue)
print('-'*100)

deque_queue=deque(['A','B','C'])
print('双端队列',deque_queue)
deque_queue.append('F')

deque_queue.appendleft('E')
print('双端队列',deque_queue)

deque_queue.rotate(1)
print('循环右移1次后的队列',deque_queue)

deque_queue.rotate(-2)
print('循环左移2次后的队列',deque_queue)

deque_queue.popleft()
print('删除最左端元素后的队列',deque_queue)

deque_queue.pop()
print('删除最右端元素后的队列',deque_queue)
print('-'*100)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值