java fifo lifo_一日一技:Python队列:FIFO 和 LIFO

9174ff721162f8edb8ff086787d6f16e.pngpython学习

Python队列:FIFO,LIFO

什么是Python队列?

队列是保存数据的容器。 首先输入的数据将被首先删除,因此队列也称为“先进先出”(FIFO)。 队列有两个前端。 这些项目是从后面输入的,并且是从前面删除的。

在这小节中,我们将学习以下内容:

什么是Python队列?Python队列如何工作?Python中的队列类型Python队列安装Queue和LifoQueue类中可用的方法先进先出队列示例后进先出队列示例在队列中添加多个项目排序队列反转队列Python队列如何工作?

可以将队列与现实世界中的例子进行比较,例如排队的人在售票柜台排队,首先站着的人将首先获得票,然后是下一个人,依此类推。 队列数据结构也采用相同的逻辑。

以下是队列的示意图:

ed7b4ee98a714e02eb1c673881d13627.png

Rear表示将元素插入队列中的位置。 在上面示例中,值是7。

Front 表示从队列中删除元素的点。 如果从队列中删除一个元素,则得到第一个元素1,如上图所示。

元素1是要插入队列中的第一个元素,而删除则是第一个出现的元素。 因此,该队列称为FIRST IN FIRST OUT(FIFO),也叫先进先出。

dda8ab18cc1672999de7689f3cd1bd03.png

在队列中,元素是按顺序删除的,并且不能从两者之间删除。 我们不能从队列中随机删除元素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()方法。

希望这篇文章对你们有用,

欢迎在下方讨论留言,

谢谢关注.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值