先进者后出,后进者先出,LIFO,典型的"栈"结构

从栈的操作特性上来看,栈是一种"操作受限"的线性表,只允许在一段插入和删除数据。

在功能上来说,数组和链表可以代替栈,但特定的数据结构是对特定场景的抽象,

数组或链表暴露了太多的操作接口,操作上的确灵活自由,但使用时就比较不可控,也就更容易出错。

当某个数据集合 只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,"栈"的存在就凸显出来了。

栈可以用数组来实现,叫顺序栈

也可以用链表来实现,叫链式栈

栈主要有两个操作:入栈push()出栈pop()

也就是在栈顶插入一个数据和从栈顶删除一个数据。

不管是顺序栈还是链式栈,入栈、出栈只涉及栈顶个别数据的操作。

队列

先进者先出,FIFO,典型的"队列"结构。

跟栈一样也是一种操作受限的线性表数据结构。

队列很贴近生活中的排队,先来先买,后来者排在后面,不允许插队。

特点:先进先出,主要的两个操作:入队和出队。

跟栈的操作一般无二,数组实现的叫顺序队列,链表的是链式队列

队列只支持:入队enqueue(),放一个数据到队列尾部;

      出队dequeue(),  从队列头部取一个数据。

循环队列、阻塞队列、并发队列等具有某些额外特性的队列,

它们在很多偏底层系统,框架、中间件的开发中,起到了关键性作用。

阻塞队列 (有点生成器的味道)

就是在队列基础上添加了阻塞操作。

在队列为空的时候,从对头取数据会被阻塞。因为此时还没有数据可取,直到队列中有了数据才能返回;

如果队列满了,那么插入数据的操作就会被阻塞,直到有了空闲位置,再插入数据,然后再返回

使用阻塞队列 可以轻松实现一个  "生产者 - 消费者模式"。

可以有效地协调生产和消费速度。当“生产者”生产数据的速度过快,

“消费者”来不及消费时,存储数据的队列很快就满了。这个时候,生产者就阻塞等待,直到“消费者”消费了数据,

“生产者”才会被唤醒继续“生产”。

还可以通过协调“生产者”和“消费者”的个数,来提高数据的处理效率。

可以多配置几个“消费者”,来应对一个“生产者”。

栈 & 队列的更多相关文章

  1. java 集合 Connection 栈 队列 及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  2. Java 容器之 Connection栈队列及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  3. java面向对象的栈 队列 优先级队列的比较

    栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一 ...

  4. C++实现一个简单的双栈队列

    双栈队列的原理是用两个栈结构模拟一个队列, 一个栈A模拟队尾, 入队的元素全部压入此栈, 另一个栈B模拟队首, 出队时将栈A的元素弹入栈B, 将栈B的栈顶元素弹出 此结构类似汉诺塔, 非常经典, 这里 ...

  5. 栈&队列&并查集&哈希表(julyedu网课整理)

    date: 2018-11-25 08:31:30 updated: 2018-11-25 08:31:30 栈&队列&并查集&哈希表(julyedu网课整理) 栈和队列 1. ...

  6. Leetcode栈&队列

    Leetcode栈&队列 232.用栈实现队列 题干: 思路: 栈是FILO,队列是FIFO,所以如果要用栈实现队列,目的就是要栈实现一个FIFO的特性. 具体实现方法可以理解为,准备两个栈, ...

  7. 【图解数据结构】 栈&队列

    [TOC] 勤于总结,持续输出! 1.栈 1.1栈的定义 栈(stack)是限定在表尾进行插入和删除的操作的线性表. 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不包 ...

  8. 数据结构 栈&队列

    2-4 依次在初始为空的队列中插入元素a,b,c,d以后,紧接着做了两次删除操作,此时的队头元素是( ) 删除,移动头指针: 增加,移动尾指针: 删除a,b ,队头c 2-3 在一个链队列中,fron ...

  9. day22 栈 , 队列 , 约束和反射

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.请使用面向对象实现栈(后进先出)"""class Account: def ...

  10. 栈&队列

    队列部分 普通队列 举个形象的例子:排队买票. 有一列人在排队买票,前面来的人买完票就离开,后面来的人需要站在最后--依次类推. 在计算机中,数据结构队列有一个头指针和尾指针,头指针加一就代表有一个数 ...

随机推荐

  1. javaweb学习之路(3)Cookie

    1.Cookies的原理 1)首先浏览器向服务器发出请求. 2)服务器就会根据需要生成一个Cookie对象,并且把数据保存在该对象内. 3)然后把该Cookie对象放在响应头,一并发送回浏览器. 4) ...

  2. Docker & Kubenetes 系列四:集群,扩容,升级,回滚

    本篇将会讲解应用部署到Kubenetes集群,集群副本集查看,集群自愈能力演示,集群扩容,滚动升级,以及回滚. 本篇是Docker&Kubenetes系列的第四篇,在前面的篇幅中,我们向Kub ...

  3. MySQL索引及查询优化

    mysql 索引 1.索引介绍 索引按数据结构分可分为哈希表,有序数组,搜索树,跳表: 哈希表适用于只有等值查询的场景 有序数组适用于有等值查询和范围查询的场景,但有序数组索引的更新代价很大,所以最好 ...

  4. 中国空气质量在线监测分析平台之JS加密、JS混淆处理

    中国空气质量在线监测分析平台数据爬取分析 页面分析:确定url.请求方式.请求参数.响应数据 1.访问网站首页:https://www.aqistudy.cn/html/city_detail.htm ...

  5. npm run build 时 报 __webpack_public_path__ = window.webpackPublicPath; 中的windows未定义

    原本 webpack.js在webpack.config.babel.js同目录下,在app.jsx中引用,用mac打包没问题,但是window就报window未定义,改到src和app.jsx同目录 ...

  6. asp.net MVC3.0 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction

    asp.net MVC3.0 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction 1.带有Render的方法返回值是v ...

  7. Pyqt5_QWidget

    QWidget常用方法: Qwidget.size()#获得客户区的大小 QWidget.width().QWidget.height()#获得客户区的宽度与高度 #设置不可以变宽.高 QWidget ...

  8. vue配置环境参考

    转  https://www.cnblogs.com/tu-0718/p/7521099.html 转 https://www.jianshu.com/p/1626b8643676 $ vue ini ...

  9. Java工作流引擎的测试容器-功能-使用方法-注意事项

    工作流引擎的测试容器-功能-使用方法-注意事项 关键字 Ccbpm, ccflow,jflow,工作流引擎,工作流引擎测试容器,表单引擎 功能说明 工作流的测试容器是为了解决手工模拟人工登录模式下测试 ...

  10. 整理总结数据库常用sql语句,建议收藏,忘记了可以来看一下

    第一节课:sql语言介绍(参照PPT)及基本查询sql学习 1.数据库表的介绍 emp表:员工表 dept表:部门表 salgrady:薪资水平表 Balance: 2.基本的查询语句: 知识点: s ...