美文网首页写作与程序
算法笔记:队列的使用

算法笔记:队列的使用

作者: 胖琪的升级之路 | 来源:发表于2018-10-14 22:59 被阅读4次

什么是队列?

我们可以想象我们平常排队的情况。先到的先进去,后面到来的等待排队。不允许插队。
先进先出,这就是队列

队列也是一种线性表数据结构。当然也与栈一样属于受限的线性数据结构。
操作也支持入队与出队两种操作。


摘自极客时间

队列的表现形式

我们在实现队列的时候,也是根据数组或者链表的形式来表现。
数组实现的队列,叫做顺序队列。
链表形成的队列,叫做链式队列

  • 顺序队列
    在队列的实现流程中,我们会发现需要两个指针表示位置,头指针与尾指针。我们需要对头和尾指针进行不停的移动。
    代码实现:
  • 链式队列
    链式队列使用链表实现。需要我们首先实现一个链表的代码

循环队列

循环队列表现形式就是一个环状形态,当然也有自己的头指针与尾指针


循环对垒-摘自极客时间

循环队列的满与空的判断条件:
空条件是:head=tail
满的条件:(tail+1)%n =head
满的条件的时候,最后一个位置上是没有数据的。

阻塞队列

阻塞队列是在队列的基础上加上了阻塞操作。为空或者满,都会发生阻塞操作。
阻塞队里是用数组实现,数组实现的队列有大小限制,链表实现的队列没有内存限制。前提是服务器内存不限制。


摘自极客时间

并发队列

并发队列也是线程安全的队列。实现方式是在队列的入队与出队的操作中增加锁机制。也可以是CAS(Compare & Swap)原子操作。

实战 问题操作

  • 问题:线程没有空闲线程时,新的任务请求县城资源,线程如何处理。各种处理策略应该如何操作。
    1. 直接拒绝任务请求。
    2. 阻塞的处理请求方式,将请求排队,等有空闲线程时,取出来进行任务处理。

相关文章

  • 算法笔记:队列的使用

    什么是队列? 我们可以想象我们平常排队的情况。先到的先进去,后面到来的等待排队。不允许插队。先进先出,这就是队列 ...

  • 并发队列-无界非阻塞队列ConcurrentLinkedQueu

    一、 前言 常用的并发队列有阻塞队列和非阻塞队列,前者使用锁实现,后者则使用CAS非阻塞算法实现,使用非阻塞队列一...

  • 并发编程之并发队列

    常见的并发队列有2种:阻塞队列和非阻塞队列。阻塞队列使用锁实现,非阻塞队列使用CAS非阻塞算法实现。这2种队列都是...

  • 算法-栈和队列算法总结

    栈和队列算法总结 1 模拟 1.1 使用栈实现队列 1.2 使用队列实现栈 2 栈的应用 2.1 栈操作 2.2 ...

  • 如何在javascript中使用优先级队列

    摘要:学习优先级队列很重要,因为它被用于许多算法中,例如 Dijkstra 的最短路径算法使用优先级队列。 介绍先...

  • 最大堆应用: 堆排序 --- Java版

    堆定义 生活中需要使用优先队列, 比如cpu调度算法,线程调度算法都需要把优先级高的任务装入一个优先队列Prior...

  • 优先队列 Priority Queue By Python

    Python heapq module 提供了堆(优先)队列的实现算法。使用 arrays,heap[k] <= ...

  • 浅谈算法和数据结构

    注:采转归档,自己学习查询使用 浅谈算法和数据结构: 一 栈和队列浅谈算法和数据结构: 二 基本排序算法浅谈算法和...

  • 数组实现环形队列

    利用数组结构在队列的基础下用取模算法来实现环形队列。 环形队列拥有复用功能。 主要算法思想:1)front指向队列...

  • js-实现数据结构-队列

    前言 前面讲过使用js模拟栈的算法,今天主要讲,使用js模拟队列的算法,为什么要这样做呢?说实话是闲的无聊,现在处...

网友评论

    本文标题:算法笔记:队列的使用

    本文链接:https://www.haomeiwen.com/subject/jplaaftx.html