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

    一、如何理解队列

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

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

    二、队列的实现 

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

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

    三、循环队列

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

    四、阻塞队列和并发队列

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

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

  • 相关阅读:
    mysql 存储结构
    Mysql 创建表
    java 定时任务
    SpringBoot
    Spring : Spring初识(二)
    hadoop
    JAVA学习路线图
    redis缓存和cookie实现Session共享
    说说 JAVA 代理模式
    Spring 学习教程(五):快速入门
  • 原文地址:https://www.cnblogs.com/OneSky-Mi/p/14539307.html
Copyright © 2011-2022 走看看