学习数据结构与算法的时候,我们学到的队列Queue与FIFO紧密相关,First Input First Output,先进先出。

队列是一种特殊的线性表,特点是两端一端进一端出,与日常生活中不含插队的排队相似,所以名为队列。

队列与栈应该是非常工具性的数据结构了,栈一端进出,具有LIFO的特点,与FIFO迥异。

队列的应用通常被阐释为实际中的排队活动,实际上它在计算机系统以及算法实现中用途广泛。

FIFO队列常常用作算法实现的辅助数据结构,特别是递归算法的非递归实现。
DFS的非递归实现需要借助栈,BFS的非递归实现需要借助队列。

消息队列MQ、输入队列、输出队列、就绪队列、等待队列……在计算机系统和大规模软件系统中,我们经常可以看到队列的身影。

队列往往可以被这样用于计算机系统中:

  • 解决主机与外部设备之间速度不匹配的问题。
  • 解决由多用户引起的资源竞争问题。

实际的队列未必是FIFO队列。以操作系统进程状态转化中涉及到的就绪队列而言,其实现可以是FIFO队列、优先队列、树或简单的无序链表等,不必是传统意义上的FIFO队列。

比如说模拟的网络打印机的设计。其队列固然可以用FIFO队列,却也可以用优先队列等。

优先队列与FIFO队列关系不大,底层的经典实现是堆,其应用也是比较广泛的,毕竟我们不可能一直只使用FIFO队列。

编程语言往往对队列提供了实现,优先队列格外被重视。
比如Java的java.util.Queue接口,它可以使用LinkedList作为双向链队列的实现;又比如Java的java.util.PriorityQueue,直接提供了优先队列的实现。
C++的STL中也提供了头文件#include <queue>下的priority_queue实现。

学好栈和队列,对于提升我们的算法实现能力,大有裨益。

【数据结构与算法】浅谈队列的应用相关推荐

  1. 【python】数据结构和算法 + 浅谈单链表与双链表的区别

    有这么一句话说"程序=数据结构+算法",也有人说"如果把编程比作做菜,那么数据结构就好比食材(菜),算法就好比厨艺(做菜的技巧)". 当然这是笼统的说法,不过也 ...

  2. 数据结构与算法之循环队列的操作

    数据结构与算法之循环队列的操作 /* 循环队列的入队和出队算法设计 初始化循环队列 .打印队列.插入元素到循环队列.获取循环队列的首元素,元素不出队.出队.获取循环队列元素个数.判断循环队列的空和满. ...

  3. python 熊猫钓鱼_Python数据结构与算法之使用队列解决小猫钓鱼问题

    本文实例讲述了Python数据结构与算法之使用队列解决小猫钓鱼问题.分享给大家供大家参考,具体如下: 按照<啊哈>里的思路实现这道题目,但是和结果不一样,我自己用一幅牌试了一下,发现是我的 ...

  4. 数据结构与算法-栈与队列

    数据结构与算法-栈与队列 栈 基本概念 简单表述就是仅在表尾进行插入和删除操作的线性表. 常见操作 入栈和出栈, 均在线性表的尾部进行. 基本原则就是, 先入后出. 队列 基本概念 和栈不同的是,队列 ...

  5. 数据结构与算法--再谈递归与循环(斐波那契数列)

    再谈递归与循环 在某些算法中,可能需要重复计算相同的问题,通常我们可以选择用递归或者循环两种方法.递归是一个函数内部的调用这个函数自身.循环则是通过设置计算的初始值以及终止条件,在一个范围内重复运算. ...

  6. 2.2基本算法之递归和自调用函数_数据结构与算法之5——队列和栈

    栈和队列比较简单,而且实用性非常广泛,这里主要介绍一下他们的概念和实现,在很多算法中,栈和队列的运用很重要,因此,虽然简单确是最重要的数据结构之一,必须重视. 栈是保证元素后进先出(后存入者先使用,L ...

  7. 2-路插入排序c语言算法,浅谈2路插入排序算法及其简单实现

    2路插入排序算法是在直接插入排序算法的基础上增加了一个辅助数组,其目的是减少排序过程中的移动次数,需要增加n个记录的辅助空间. 难点可能在于对取余的考虑吧,可以把辅助数组看成一个环状空间,这样就能更好 ...

  8. 广度优先算法_算法浅谈——走迷宫问题与广度优先搜索

    本文始发于个人公众号:TechFlow,原创不易,求个关注 在之前周末LeetCode专栏当中,我们详细描述了深度优先搜索和回溯法,所以今天我们继续这个话题,来和大家聊聊搜索算法的另一个分支,广度优先 ...

  9. 快速排序 c++_算法浅谈——分治算法与归并、快速排序(附代码和动图演示)

    本文始发于个人公众号:TechFlow 在之前的文章当中,我们通过海盗分金币问题详细讲解了递归方法. 我们可以认为在递归的过程当中,我们通过函数自己调用自己,将大问题转化成了小问题,因此简化了编码以及 ...

最新文章

  1. Play自动生成的项目目录简介
  2. 男子商场抱起小女孩致其坠落 警方:嫌疑人被刑拘
  3. vuex的计算属性_Vuex详细介绍
  4. matlab的算法java_matlab环境下的回归算法分析
  5. 傲游浏览器怎么创建笔记 傲游浏览器笔记创建方法分享
  6. 线性代数:矩阵学习笔记
  7. 文字不间断横向滚动 代码 IE FireFox兼容代码
  8. python航空订票系统_航空订票系统 - 智慧点点的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 鱼之死,越狱章鱼和雾霾黑客
  10. Python实现十大排序算法
  11. stata基本操作(一)
  12. 修正牛顿法及其matlab实现
  13. 【48期】盘点Netty面试常问考点:什么是 Netty 的零拷贝?
  14. 如何注册登录Google浏览器
  15. Android 2.2开始支持安装APP2SD卡上
  16. fp增长树java实现_FP-Tree算法的实现(Java版)
  17. JSP/Servlet临汾天泰学习笔记(一)
  18. java飞行棋项目_java小项目 类与 对象 骑士飞行棋代码
  19. 说自己精通Vue的,长点心吧!
  20. PHP负数转正数,正负数转换:正数转负数、负数转正数

热门文章

  1. USB 设备驱动(写给自己看的)
  2. 深入浅出的排序算法-冒泡排序
  3. js数组sort排序原理
  4. 测试用例设计方法 - 场景分析法
  5. python的递归算法学习(1)
  6. 12.UiAutomator 获取系统信息
  7. 本周数据与上周对比应如何表达_互联网运营中的数据分析方法
  8. 并发编程概念、程序线程进程、线程同步、互斥量、读写锁、协程并发
  9. Golang——数据类型转换(Sprintf、Format、Append方式转换)
  10. linux so文件统一目录,linux加载指定目录的so文件