本篇博客摘自下面的博客和自己的理解进行补充,如有侵权,请告知,删除这篇博客, 谢谢!。
参考博客:
python中的Queue(队列)详解
Python 采用列表实现栈(Stack)
Queue
.Queue分成以下三种:
.FIFO:
Queue.Queue(maxsize=0)
FIFO即First in First Out,先进先出。Queue提供了一个基本的FIFO容器,使用方法很简单,maxsize是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。
.LIFO
Queue.LifoQueue(maxsize=0)
LIFO即Last in First Out,后进先出。与栈的类似,使用也很简单,maxsize用法同上
.priority
class Queue.PriorityQueue(maxsize=0)
priority即插入队列中自动排序,无序入队列,弹出时按照从大到小的顺序弹出,使用方法与上面的类似。
Queue的方法
Queue.Queue(maxsize=0) FIFO, 如果maxsize小于1就表示队列长度无限
Queue.LifoQueue(maxsize=0) LIFO, 如果maxsize小于1就表示队列长度无限
Queue.PriorityQueue(maxsize=0) Priority, 如果maxsize小于1就表示队列长度无限
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.get([block[, timeout]]) 读队列,timeout等待时间,此外在读出队首元素的同时,把队首元素弹出队列
Queue.put(item, [block[, timeout]]) 写队列,timeout等待时间 ,把item加入队尾
Queue.queue.clear() 清空队列
Queue.Queue(maxsize=0) 使用方法
import queue
q = queue.Queue()#创建对象
for i in range(10):
q.put(i)#插入队尾
print(q.qsize())#队列长度
t = q.get()
print(t)#弹出的队首的数据
print(q.qsize())#现在对列长度为9
while not q.empty():#遍历队列
print(q.get())
print(q.qsize())#现在队列的长度
Queue.LifoQueue(maxsize=0)使用的方法
Queue.LifoQueue(maxsize=0)的使用方法与上面没有什么区别,就不详细介绍了
Queue.PriorityQueue(maxsize=0)使用方法
Queue.PriorityQueue(maxsize=0)的使用方法其实跟上面的使用的一样,就是弹出的结果不一致。
import queue
import random
q = queue.PriorityQueue()#创建对象
for i in range(10):
q.put(random.randint(1, 10))# 1~10之间的随机数
print(q.qsize())#现在对列长度为9
while not q.empty():#遍历队列,结果从小到大
print(q.get())
print(q.qsize())#现在队列的长度
结果:
Stack的使用
我在查找的时候发现没有stack模块,有两个解决方法。
1.使用Queue.LifoQueue(maxsize=0),他的原理我感觉其实和栈没有什么区别。
2.自己写一个栈
类实现 :
class Stack(object):
# 初始化栈为空列表
def __init__(self):
self.items = []
# 判断栈是否为空,返回布尔值
def is_empty(self):
return self.items == []
# 返回栈顶元素
def peek(self):
return self.items[len(self.items) - 1]
# 返回栈的大小
def size(self):
return len(self.items)
# 压栈,入栈,进栈
def push(self, item):
self.items.append(item)
# 出栈
def pop(self):
return self.items.pop()
在用的时候重新开一个python文件命名为stack,别的也可以。
使用方法:
import stack#你命名的问件名称
s = stack.Stack()#构建类
for i in range(10):
s.push(i)#压入栈
while not s.is_empty():#判断栈是否为空
print(s.peek())#栈顶元素
s.pop()#弹出栈