Python学习笔记:4.1.4 队列

本文是学习陆老师的《python全栈工程师 - 数据结构与算法》课程的笔记,欢迎学习交流。同时感谢陆老师的精彩传授!

一、课程目标
  • 队列的概念
  • 队列的python实现
二、详情解读

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

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

Python学习笔记:4.1.4 队列_第1张图片
02.队列的Python实现
主要方法列表:

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

队列的实现
Python学习笔记:4.1.4 队列_第2张图片
Python学习笔记:4.1.4 队列_第3张图片
Python学习笔记:4.1.4 队列_第4张图片
链表实现队列

1、使用链表实现队列,从链表首部压入与尾部弹出
2、需要设定一个尾部位置标志
3、时间复杂度为O(1)

Python学习笔记:4.1.4 队列_第5张图片
02.Python内置队列

queue模块与collections.deque

1.queue.Queue - FIFO队列
2.queue.LifoQueue - LIFO队列
3.queue.PriorityQueue - 优先级队列
4.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 # LILO队列
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)

运行结果:
Python学习笔记:4.1.4 队列_第6张图片

# LIFO 队列
from queue import LifoQueue
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)

运行结果:
Python学习笔记:4.1.4 队列_第7张图片

# 双端队列
from collections import deque
deque_queue = deque(['A', 'B', 'C'])

print(deque_queue)
# 在右侧插入新元素
deque_queue.append('F')
# 在左侧插入新元素
deque_queue.appendleft('E')
print(deque_queue)

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

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

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

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

# 返回并删除队列最右端元素
deque_queue.pop()
print('删除最右端元素后的队列', deque_queue)

运行结果:
Python学习笔记:4.1.4 队列_第8张图片

三、课程小结
  • 学习了队列的概念
  • 学习了队列的实现
  • 学习了python的内置队列实现

你可能感兴趣的:(Python全栈工程师学习笔记,python,队列,链表,queue)