资讯专栏INFORMATION COLUMN

Python数据结构——队列

wwolf / 2293人阅读

摘要:队列是一种先进先出,的数据结构。队列的另外一项重要操作是读取队头的元素。通常的操作定义一个空队列,无参数,返回值是空队列。删除队列头部的数据项,不需要参数,返回值是被删除的数据,队列本身有变化。

队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素。队列用于存储按顺序排列的数据,先进先出,这点和栈不一样,在栈中,最后入栈的元素反而被优先处理。可以将队列想象成在银行前排队的人群,排在最前面的人第一个办理业务,新来的人只能在后面排队,直到轮到他们为止。

队列是一种先进先出(First-In-First-Out,FIFO)的数据结构。队列被用在很多地方,比如提交操作系统执行的一系列进程、打印任务池等,一些仿真系统用队列来模拟银行或杂货店里排队的顾客。

队列的两种主要操作是:向队列中插入新元素和删除队列中的元素。插入操作也叫做入队,删除操作也叫做出队。入队操作在队尾插入新元素,出队操作删除队头的元素。

队列的另外一项重要操作是读取队头的元素。这个操作叫做peek()。该操作返回队头元素,但不把它从队列中删除。除了读取队头元素,我们还想知道队列中存储了多少元素,可以使用size()满足该需求。

queue通常的操作:

Queue()        定义一个空队列,无参数,返回值是空队列。
enqueue(item)  在队列尾部加入一个数据项,参数是数据项,无返回值。
dequeue()      删除队列头部的数据项,不需要参数,返回值是被删除的数据,队列本身有变化。
isEmpty()      检测队列是否为空。无参数,返回布尔值。
size()         返回队列数据项的数量。无参数,返回一个整数。

队列操作举例:

Queue Operation Queue Contents Return Value
q.isEmpty() [] True
q.enqueue(4) [4]
q.enqueue("dog") ["dog",4]
q.enqueue(True) [True,"dog",4]
q.size() [True,"dog",4] 3
q.isEmpty() [True,"dog",4] False
q.enqueue(8.4) [8.4,True,"dog",4]
q.dequeue() [8.4,True,"dog"] 4
q.dequeue() [8.4,True] "dog"
q.size() [8.4,True] 2

Queue 类模拟:

class Queue:
    """模拟队列"""
    def __init__(self):
        self.items = []

    def isEmpty(self):
        return self.items == []

    def enqueue(self, item):
        self.items.insert(0,item)

    def dequeue(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

以下是测试代码:

q=Queue()
q.isEmpty()

q.enqueue("dog")
q.enqueue(4)
q=Queue()
q.isEmpty()

q.enqueue(4)
q.enqueue("dog")
q.enqueue(True)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44177.html

相关文章

  • Python -- Queue模块

    摘要:默认值为,指定为时代表可以阻塞,若同时指定,在超时时返回。当消费者线程调用意味着有消费者取得任务并完成任务,未完成的任务数就会减少。当未完成的任务数降到,解除阻塞。 学习契机 最近的一个项目中在使用grpc时遇到一个问题,由于client端可多达200,每个端口每10s向grpc server发送一次请求,server端接受client的请求后根据request信息更新数据库,再将数据...

    rubyshen 评论0 收藏0
  • rabbitmq中文教程python版 - 介绍

    摘要:每当我们收到一条消息,这个回调函数就被皮卡库调用。接下来,我们需要告诉这个特定的回调函数应该从我们的队列接收消息为了让这个命令成功,我们必须确保我们想要订阅的队列存在。生产者计划将在每次运行后停止欢呼我们能够通过发送我们的第一条消息。 源码:https://github.com/ltoddy/rabbitmq-tutorial 介绍 RabbitMQ是一个消息代理:它接受和转发消息。你...

    yimo 评论0 收藏0
  • Python数据结构——双端队列

    摘要:在队尾添加入一个元素,参数是数据项,无返回值。删除队首的元素,不需要参数,返回值是被删除的元素,队列本身有变化。列表用于随机访问和定长数据的操作,包括切片,而双端队列适用于在两端压入或弹出元素,索引但不包括切片的效率可能低于列表。 双端队列(Deque),是一种类似于队列的元素的有序集合。它拥有两端,队首和队尾,并且元素保持在当前的位置。双端队列的一个不同点就是,添加和删除元素的位置不...

    cjie 评论0 收藏0
  • 线性结构 队列与栈

    摘要:线性结构队列与栈栈栈是一种遵循先进后出原则的有序列表,新添加或待删除的元素都保存在栈的一端,这一端被称作为栈顶,另一端被称作为栈底。将字符串的每个字符按顺序亚入栈。 线性结构 队列与栈 栈 栈(Stack)是一种遵循先进后出(LIFO)原则的有序列表,新添加或待删除的元素都保存在栈的一端,这一端被称作为栈顶,另一端被称作为栈底。在栈里,新元素都靠近栈顶,旧元素都靠近栈底。 栈的操作 ...

    Turbo 评论0 收藏0
  • 线性结构 队列与栈

    摘要:线性结构队列与栈栈栈是一种遵循先进后出原则的有序列表,新添加或待删除的元素都保存在栈的一端,这一端被称作为栈顶,另一端被称作为栈底。将字符串的每个字符按顺序亚入栈。 线性结构 队列与栈 栈 栈(Stack)是一种遵循先进后出(LIFO)原则的有序列表,新添加或待删除的元素都保存在栈的一端,这一端被称作为栈顶,另一端被称作为栈底。在栈里,新元素都靠近栈顶,旧元素都靠近栈底。 栈的操作 ...

    Turbo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<