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

    一、如何理解队列

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

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

    二、队列的实现 

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

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

    三、循环队列

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

    四、阻塞队列和并发队列

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

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

  • 相关阅读:
    oracle的分析函数over 及开窗函数
    ASP.NET中分布式事务的使用
    后台实现显示欢迎用户登陆的方法
    AjaxHelper的get和post请求的封装类
    登陆权限验证Session和Cookie用法及BasePage类使用
    四个常用.NET的SqlHelper的方法
    ASP.NET在实际开发中验证码的用法
    SQL Server事务的存储过程
    利用JQuery实现全选和反选的几种方法
    JS中表格的全选和删除要注意的问题
  • 原文地址:https://www.cnblogs.com/OneSky-Mi/p/14539307.html
Copyright © 2011-2022 走看看