zoukankan      html  css  js  c++  java
  • 数据机构与算法学习(七)- 队列

    一、如何理解队列

    可以想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进先出,这就是典型的队列

    栈只支持两个基本操作:入栈和出栈。队列和栈非常相似,支持的操作也很有限,基本的操作也是两个:入队,放一个数据到队列尾部;出队,从队列头取一个元素。所以队列和栈一样,也是一种操作受限的线性表数据结构

    二、队列的实现 

    用数组实现的队列叫作顺序队列。用链表实现的队列叫作链式队列

    顺序队列:需要两个指针,一个head指针指向队头;一个是tail指针指向队尾。经过不停的出队入队,head指针和tail指针都会持续往后移动。当tail指针移动到最右边以后,出队是没有问题的,再入队时触发一次数据搬移。将head到tail中的数据搬移到数组中0到tail的位置,然后再进行入队操作。

    三、循环队列

    循环队列,最关键的是,确定好队空和队满的判定条件。

    四、阻塞队列和并发队列

    阻塞队列其实就是再队列基础上增加了阻塞操作。简单来说,就是在队列为空的时候,从队头取数据会被阻塞。因为此时还没有数据可取,直到队列中有数据才能返回;如果队列已经满了,那么插入数据的操作就会被阻塞,直到队列中有空闲的位置后在插入数据,再返回。

    线程安全的队列叫作并发队列、实际上基于数组的循环队列,利用CAS原子操作,可以实现非常高效的并发队列。这也是循环队列比链式队列应用更加广泛的原因。

  • 相关阅读:
    1. Deep Q-Learning
    Ⅶ. Policy Gradient Methods
    Ⅴ. Temporal-Difference Learning
    idea在service窗口中显示多个服务
    pycharm下运行flask框架的脚本时报错
    windows下部署 flask (win10+flask+nginx)
    pip install selenium报错解决方法
    pip 及 selenium安装命令
    动作捕捉系统用于模仿学习
    柔性微创手术机器人性能实验验证
  • 原文地址:https://www.cnblogs.com/OneSky-Mi/p/14539307.html
Copyright © 2011-2022 走看看