美文网首页
队列 笔记

队列 笔记

作者: 秋缘未了 | 来源:发表于2018-10-10 17:15 被阅读15次

队列是一种先进先出的数据结构,跟栈类似,队列是一种操作受限的线性表。

队列同样可以由数组和链表来实现。

队列需要两个指针:一个是 head 指针,指向队头;一个是 tail 指针,指向队尾。

## 顺序队列

顺序队列存在一个问题, tail 指针移动到数组最大下标时,即使数组中还有空闲空间,也无法继续往队列中添加数据了。

解决方法是在入队列时,如果没有空闲空间,就触发一次搬运,将 head 到 tail 之间的数据,整体搬运到数组的 0 到 tail - head 位置。

## 链式队列

链式队列与顺序队列的区别是没有容量限制,在请求排队的场景下,如果排队的请求数量过多,请求处理的响应时间会过长。

## 循环队列

循环队列是为了解决顺序队列在 tail == n 时,需要数据搬运操作的问题。

队列为空时可以根据 head == tail 来判断。循环队列满时,tail 指针位置不存储数据,所以队满判断公式为:

(tail + 1) % n = head

## 阻塞和并发队列

阻塞队列在队列为空的时候,从队头取数据会被阻塞,直到队列中有数据才会返回;如果队列已经满了,插入数据操作会被阻塞,直到队列中有空闲的位置后再插入,然后再返回。

在考虑线程安全时,需要用到并发队列,并发队列同一时刻只允许一个插入操作,但是允许多个读操作。

相关文章

  • kafka

    kafka笔记 一、kafak简介 1、消息队列 消息队列:用于存放消息的组件 程序员可以将消息放入到队列中,也可...

  • 队列 笔记

    队列是一种先进先出的数据结构,跟栈类似,队列是一种操作受限的线性表。 队列同样可以由数组和链表来实现。 队列需要两...

  • GCD 个人理解

    看GCD精讲(Swift 3&4)做的笔记 gcd 让开发人员由面向线程编程编为面向队列编程。 队列: 同步队列、...

  • Android LinkedBlockingDeque 双向阻塞

    前言 最近并发编程用到就简单做下笔记 何为双向阻塞队列 队列 一种常见的先进先出,后进后出的数据结构 阻塞队列...

  • 40. 用栈实现队列

    40. 用栈实现队列 描述 笔记 数据 评测 正如标题所述,你需要使用两个栈来实现队列的一些操作。 队列应支持pu...

  • 消息队列学习笔记

    《消息队列必知必会》是极客时间上一门课程,总共5讲,以下为学习笔记。 第一讲,为什么需要消息队列 消息队列是古老的...

  • Java并发系列 — 阻塞队列(BlockingQueue)

    本文系《Java并发编程艺术》的读书笔记 什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加...

  • RabbitMQ实战:运行和管理RabbitMQ

    本系列是「RabbitMQ实战:高效部署分布式消息队列」书籍的总结笔记。 上一篇 介绍了AMQP消息通信,包括队列...

  • GCD 队列笔记

    快速迭代函数: 栅栏函数: 队列组: 等所有的并发任务执行完才执行xxx任务 老用法(不推荐): 老办法下载两张图...

  • 用两个栈实现队列

    《剑指offer》刷题笔记。如有更好解法,欢迎留言。 关键字:栈 队列 题目描述: 用两个栈来实现一个队列,完成队...

网友评论

      本文标题:队列 笔记

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