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

    一、如何理解队列

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

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

    二、队列的实现 

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

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

    三、循环队列

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

    四、阻塞队列和并发队列

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

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

  • 相关阅读:
    [笔记] Delphi 10.2.1 Tokyo 安装使用笔记
    [控件] Firemonkey 跨平台 Toast
    [iOS] Edit / Memo 原生控件才提供拼字检查
    [外观] Firemonkey Windows Hint 气球样式
    SQL实现value为1,2,3转换为值
    关于python的一些坑
    Python JSON
    python 字典拷贝
    python 日期、时间、字符串相互转换
    python获取cookie的方法
  • 原文地址:https://www.cnblogs.com/OneSky-Mi/p/14539307.html
Copyright © 2011-2022 走看看