python学习
Python队列:FIFO,LIFO
什么是Python队列?
队列是保存数据的容器。 首先输入的数据将被首先删除,因此队列也称为“先进先出”(FIFO)。 队列有两个前端。 这些项目是从后面输入的,并且是从前面删除的。
在这小节中,我们将学习以下内容:
什么是Python队列?Python队列如何工作?Python中的队列类型Python队列安装Queue和LifoQueue类中可用的方法先进先出队列示例后进先出队列示例在队列中添加多个项目排序队列反转队列Python队列如何工作?
可以将队列与现实世界中的例子进行比较,例如排队的人在售票柜台排队,首先站着的人将首先获得票,然后是下一个人,依此类推。 队列数据结构也采用相同的逻辑。
以下是队列的示意图:
Rear表示将元素插入队列中的位置。 在上面示例中,值是7。
Front 表示从队列中删除元素的点。 如果从队列中删除一个元素,则得到第一个元素1,如上图所示。
元素1是要插入队列中的第一个元素,而删除则是第一个出现的元素。 因此,该队列称为FIRST IN FIRST OUT(FIFO),也叫先进先出。
在队列中,元素是按顺序删除的,并且不能从两者之间删除。 我们不能从队列中随机删除元素5,为此,将必须删除5之前的所有元素,队列中的元素将按照插入顺序删除。
Python中的队列类型
Python中主要有2种类型的队列:
先进先出队列:为此,最先出现的元素将是第一个出现的元素。要使用FIFO,您必须从队列模块调用Queue()类。后进先出队列:在这里,最后输入的元素将是第一个出现的元素。要使用LIFO,必须从队列模块中调用LifoQueue()类。
Python队列安装
在python中使用队列非常容易。 以下是使用队列的步骤。
步骤1)导入队列模块,如下所示:
import queue
默认情况下,该模块可用于python,并且不需要任何其他安装即可开始使用队列。 队列FIFO有2种类型(先进先出)和LIFO(先进先出)。
步骤2)要使用FIFO队列,请使用导入的队列模块调用Queue类,如下所示:
import queue
q1 = queue.Queue()
步骤3)要使用LIFO队列,请调用LifoQueue()类,如下所示:
import queue
q1 = queue.LifoQueue()
Queue和LifoQueue类中可用的方法
以下是Queue和LifoQueue类中可用的重要方法:
put(item):这会将项目放入队列中。get():这将从队列中返回一个项目。empty():如果队列为空,则返回true;如果存在项目,则返回false。qsize():返回队列的大小。full():如果队列已满,则返回true,否则返回false。
先进先出队列示例
在先进先出的情况下,最先出现的元素将是第一个出现的元素。
在队列中添加元素
让我们来看一个在队列中添加元素的示例。
要开始使用队列,请导入模块队列,如下例所示。
import queue
q1 = queue.Queue()
q1.put(10)
默认情况下,队列的大小是无限的,我们可以向其中添加任意数量的元素。 如果我们要定义队列的大小,可以按照以下步骤进行操作;
import queue
q1 = queue.Queue(5)
q1.put(1)
q1.put(2)
q1.put(3)
q1.put(4)
q1.put(5)
print(q1.full())
输出:
True
现在,队列的大小为5,它将不超过5个元素,并且方法q1.full()将返回true。 添加更多元素不再执行代码。
从队列中删除元素
要从队列中删除元素,可以使用get()方法;以下示例
import queue
q1 = queue.Queue()
q1.put(10)
item1 = q1.get()
print('The item removed from the queue is ', item1)
输出:
The item removed from the queue is 10
后进先出队列示例
对于后进先出队列,最后输入的元素将是第一个出现的元素。
要使用LIFO,即先进先出队列,我们需要导入队列模块并使用LifoQueue()方法
在队列中添加元素
在这里,我们将了解如何向LIFO队列添加元素。
import queue
q1 = queue.LifoQueue()
q1.put(10)
如上例所示,必须在LifoQueue上使用put()方法。
从队列中删除元素
要从LIFOqueue中删除项目,可以使用get()方法。
import queue
q1 = queue.LifoQueue()
q1.put(10)
item1 = q1.get()
print('The item removed from the LIFO queue is ', item1)
输出:
The item removed from the LIFO queue is 10
在队列中添加多个元素
在上面的示例中,我们已经看到了如何添加单个元素并为FIFO和LIFOqueue删除其中的元素。 现在,我们看如何添加多个元素并将其删除。
在FIFO队列中添加元素
import queue
q1 = queue.Queue()
for i in range(20):
q1.put(i)
从FIFO队列中删除一个元素
import queue
q1 = queue.Queue()
for i in range(20):
q1.put(i)
while not q1.empty():
print("The value is ", q1.get())
输出:
The value is 0
The value is 1
The value is 2
The value is 3
The value is 4
The value is 5
The value is 6
The value is 7
The value is 8
The value is 9
The value is 10
The value is 11
The value is 12
The value is 13
The value is 14
The value is 15
The value is 16
The value is 17
The value is 18
The value is 19
在LIFOqueue中添加元素
import queue
q1 = queue.LifoQueue()
for i in range(20):
q1.put(i)
从LIFOqueue中移除元素
import queue
q1 = queue.LifoQueue()
for i in range(20):
q1.put(i)
while not q1.empty():
print("The value is ", q1.get())
输出:
The value is 19
The value is 18
The value is 17
The value is 16
The value is 15
The value is 14
The value is 13
The value is 12
The value is 11
The value is 10
The value is 9
The value is 8
The value is 7
The value is 6
The value is 5
The value is 4
The value is 3
The value is 2
The value is 1
The value is 0
排序队列
以下示例显示了队列排序。
import queue
q1 = queue.Queue()
q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)
n = q1.qsize()
for i in range(n):
x = q1.get()
for j in range(n-1):
y = q1.get()
if x > y :
q1.put(y)
else:
q1.put(x)
x = y
q1.put(x)
while (q1.empty() == False):
print(q1.queue[0], end = " ")
q1.get()
输出:
3 4 5 10 11 21
反转队列
要反转队列,可以使用另一个队列和递归。
以下示例显示如何使队列反向:
import queue
q1 = queue.Queue()
q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)
def reverseQueue (q1src, q2dest) :
buffer = q1src.get()
if (q1src.empty() == False) :
reverseQueue(q1src, q2dest)
q2dest.put(buffer)
return q2dest
q2dest = queue.Queue()
qReversed = reverseQueue(q1,q2dest)
while (qReversed.empty() == False):
print(qReversed.queue[0], end = " ")
qReversed.get()
输出:
10 3 21 4 5 11
摘要如下:
队列是保存数据的容器。 队列有两种类型,即FIFO和LIFO。对于FIFO(先进先出队列),最先出现的元素将是第一个出现的元素。对于LIFO(后进先出队列),最后输入的元素将是第一个出现的元素。使用put(item)方法添加队列中的元素。要删除项目,请使用get()方法。
希望这篇文章对你们有用,
欢迎在下方讨论留言,
谢谢关注.