c++ 优先队列_什么是队列?(Python队列)
什么是队列?(Python队列)
前言
上篇文章介绍了
Python 中的多线程mp.weixin.qq.com
。今天来介绍下编程中常会用到的一个数据结构 - 队列。
不知道大家是否还记得什么是数据结构呢?在很早很早以前,Python小课堂的初期,讲了许多 Python 原生的数据结构。比如 list、tuple、dict 等。。。
既然叫数据结构,实际上就是为了给计算机存储数据用的一种结构体。不同的数据结构都有其不同的特点。那今天就来简单地聊聊队列!
队列的概念
抛开计算机知识体系,在咱们的生活中,队列这个词其实挺好想象的,因为无时无刻都可以见到。比如等公交的时候,需要排队。比如买东西交钱的时候,也要排队。在这些例子中,由人们有序形成的队形就叫队列。
生活中的排队,有没有什么特性而言呢?大家可以思考下,再往下看。
普通队列的特性,即先进先出(FIFO,first in first out)。对应到生活中,怎么理解这个先进先出?其实很好理解。
拿排队买东西来说,每次排在队首的人,交完钱肯定是当前队列中第一个离开收银台的人。当队首的人离开了,那么后面的所有人都要往前走,继续结账。
对应到计算机中的队列,就是因为第一个人先排的队,所以他第一个交完钱就可以离开了,即先进先出。(多说句,计算机世界许多东西其实就是抽象的现实世界示例。)
心细的同学会发现,在上面将普通两字标粗了,那一定还有一些其它的常用特殊队列,比如优先级队列。(PriorityQueue)
这次拿去银行办业务来举例。生活中我们去银行办理业务,一般都需要去机器拿号,然后等待着柜台业务人员叫号。叫到你,你就过去处理就行了。但是银行是有 vip 服务的,拥有 vip 权益的人可以更快的享受到业务办理,也就是说人家比你有更高的优先权。vip特权通道,你值得拥有!
了解了生活中的例子,再来看看比较专业的定义:
优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 。对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行。
百度百科
也就是说,在优先级队列中,每个人都有一个优先权对应,谁的优先权高,谁就会先被处理。大家了解即可。
示例演示
示例情景:
假设下面有 6 个美少女,她们准备去量身高,恰好这几个妹纸是按照从高到低,从大到小排好队的。
每走一个去量身高,这个队列中就会少一个人。当然,队首在左,队尾在右,于是她们的变化是下面这样:
。。。。。。省略,直到:
代码演示
是不是好多人看到这里就不打算看了。。不是让你来看美少女的喂。。。下面才是重点~
第一部分代码:
import
简单的讲解下,在 Python3 中,有个模块叫 queue。里面实现了几个队列的数据结构。首先看 do_work() 函数,其中它就是用来打印妹子姓名和年龄的。worker() 函数中写了一层死循环,只要队列中有妹纸的数据,就一直执行打印,直到队列中的妹纸都没了,就跳出。
第二部分代码:
q
首先创建队列,其次,让这 6 个美少女开始依次排入到队列中,开启多线程去执行 worker() 这个函数。worker() 函数就是第一部分代码中,从队列里一个个取出妹纸,在调用 do_work() 打印她们的姓名和年龄。
关于队列的 join() 方法,可以看到官方给的英文注释,大意是当所有任务完成时才继续执行后面的代码,否则处于阻塞状态。
代码中涉及的方法,老规矩,希望大家可以自己去查阅 Python 官方文档,搜索 queue 即可看到。当然如果懒得动手的话,笔者这里截图几个常用方法:
将妹纸放入队列中:
从队列中获取妹纸:
获取队列中妹纸的个数:
总结
通过两篇文章,简单的介绍了一下多线程和队列,目的是为了接下来的多线程队列爬虫示例做准备,如果对这些不了解的话,在后面的代码中是很难看懂的。
关于队列的使用,最常用的方法应该就是放入、获取、判断队列的大小。其实这三点在大部分数据结构里都是常用的操作,熟练掌握即可。
本章完整代码,就是文中第一部分和第二部分的代码拼接,因为太长,所以分开讲了下。
如果大家有什么问题想沟通,可以留言交流哈!
c++ 优先队列_什么是队列?(Python队列)相关推荐
- python 优先队列_示例讲解:python队列原理及实现方法与操作思路
今天为大家带来的内容是:示例讲解:python队列原理及实现方法与操作思路 本文内容主要介绍了python队列原理及实现方法,结合实例形式详细分析了Python队列的概念.原理.定义及基本操作技巧,需 ...
- 栈和队列——python
目录 一.栈 定义一个栈 栈的应用--括号匹配问题 栈的应用--迷宫问题 二.队列 自定义队列 python队列的内置模块 队列应用--打印文件后五行 队列应用--迷宫问题 python的数据结构与算 ...
- python循环队列_JS 队列-优先队列、循环队列
<学习JavaScript数据结构与算法>读书笔记. 队列是遵行FIFO(First In First Out, 先进先出)原则的一组有序的项.队列再尾部添加新元素,并从顶部移除元素. 在 ...
- python队列只能一个个读取吗_python队列Queue的详解
Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...
- 第二百九十二节,RabbitMQ多设备消息队列-Python开发
RabbitMQ多设备消息队列-Python开发 首先安装Python开发连接RabbitMQ的API,pika模块 pika模块为第三方模块 对于RabbitMQ来说,生产和消费不再针对内存里的一 ...
- java先进先出 循环队列,JavaScript队列、优先队列与循环队列
队列是一种遵从先进先出(FIFO)原则的有序集合 队列在尾部添加新元素,从顶部移除元素 队列的理解 队列在我们生活中最常见的场景就是排队了 队列这个名字也已经很通俗易懂了 和栈很像,这不过队列是先入先 ...
- python队列实现_Python 数据结构之队列的实现
Python 队列 Queue 队列是一种先进先出(FIFO)的数据类型, 新的元素通过 入队 的方式添加进 Queue 的末尾, 出队 就是从 Queue 的头部删除元素. 用列表来做 Queue: ...
- Python队列Queue
Python队列Queue Queue是python标准库中的线程安全的队列(FIFO),提供了一个多线程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递. 常见方法 1.put( ...
- python队列溢出_python – 多处理队列maxsize限制是32767
我正在尝试使用多处理编写Python 2.6(OSX)程序,并且我想填充一个超过默认值32767项的Queue. from multiprocessing import Queue Queue(2** ...
最新文章
- js事件触发器fireEvent和dispatchEvent
- 产品经理岗位职责说明_公司销售经理岗位职责说明书
- 怎样修改flash builder注释里的@author
- 基于表单的网站身份验证的权威指南[关闭]
- html5的网页布局工具,HTML5网站响应式布局的主流设计方法介绍及工具推荐
- The python debugger(PDB)的简介
- 阿里云linux上安装与配置Mysql
- 内涝预测过程的噪音_第七章噪声解析
- linux服务器文件名称乱码,linux中文文件名乱码怎么解决?
- Nginx配置SSL报错 nginx: [emerg] unknown directive ssl
- [分治] leetcode 23 合并K个升序链表
- IDEA 忽略CSS错误
- Tomcat运行时报内存溢出
- gif一键抠图 在线_不会PS,怎么免费在线抠图?一键轻松制作头像
- 扩展欧几里得模板+例题
- 左手读红楼梦,右手写 BUG,闲快活
- 用相关法辨识系统的脉冲响应 matlab,利用相关分析法辨识脉冲响应
- 微信小程序的设计以及demo
- 零基础学习之万物皆可GAN学习路线
- 了解世界杯赔率,让您运气更‘好‘(个人分享)