栈 & 队列
栈
先进者后出,后进者先出,LIFO,典型的"栈"结构
从栈的操作特性上来看,栈是一种"操作受限"的线性表,只允许在一段插入和删除数据。
在功能上来说,数组和链表可以代替栈,但特定的数据结构是对特定场景的抽象,
数组或链表暴露了太多的操作接口,操作上的确灵活自由,但使用时就比较不可控,也就更容易出错。
当某个数据集合 只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,"栈"的存在就凸显出来了。
栈可以用数组来实现,叫顺序栈 。
也可以用链表来实现,叫链式栈。
栈主要有两个操作:入栈push()和出栈pop(),
也就是在栈顶插入一个数据和从栈顶删除一个数据。
不管是顺序栈还是链式栈,入栈、出栈只涉及栈顶个别数据的操作。

队列
先进者先出,FIFO,典型的"队列"结构。
跟栈一样也是一种操作受限的线性表数据结构。
队列很贴近生活中的排队,先来先买,后来者排在后面,不允许插队。
特点:先进先出,主要的两个操作:入队和出队。
跟栈的操作一般无二,数组实现的叫顺序队列,链表的是链式队列。
队列只支持:入队enqueue(),放一个数据到队列尾部;
出队dequeue(), 从队列头部取一个数据。
循环队列、阻塞队列、并发队列等具有某些额外特性的队列,
它们在很多偏底层系统,框架、中间件的开发中,起到了关键性作用。
阻塞队列 (有点生成器的味道)

就是在队列基础上添加了阻塞操作。
在队列为空的时候,从对头取数据会被阻塞。因为此时还没有数据可取,直到队列中有了数据才能返回;
如果队列满了,那么插入数据的操作就会被阻塞,直到有了空闲位置,再插入数据,然后再返回
使用阻塞队列 可以轻松实现一个 "生产者 - 消费者模式"。
可以有效地协调生产和消费速度。当“生产者”生产数据的速度过快,
“消费者”来不及消费时,存储数据的队列很快就满了。这个时候,生产者就阻塞等待,直到“消费者”消费了数据,
“生产者”才会被唤醒继续“生产”。
还可以通过协调“生产者”和“消费者”的个数,来提高数据的处理效率。
可以多配置几个“消费者”,来应对一个“生产者”。
栈 & 队列的更多相关文章
- java 集合 Connection 栈 队列 及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- Java 容器之 Connection栈队列及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- java面向对象的栈 队列 优先级队列的比较
栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一 ...
- C++实现一个简单的双栈队列
双栈队列的原理是用两个栈结构模拟一个队列, 一个栈A模拟队尾, 入队的元素全部压入此栈, 另一个栈B模拟队首, 出队时将栈A的元素弹入栈B, 将栈B的栈顶元素弹出 此结构类似汉诺塔, 非常经典, 这里 ...
- 栈&队列&并查集&哈希表(julyedu网课整理)
date: 2018-11-25 08:31:30 updated: 2018-11-25 08:31:30 栈&队列&并查集&哈希表(julyedu网课整理) 栈和队列 1. ...
- Leetcode栈&队列
Leetcode栈&队列 232.用栈实现队列 题干: 思路: 栈是FILO,队列是FIFO,所以如果要用栈实现队列,目的就是要栈实现一个FIFO的特性. 具体实现方法可以理解为,准备两个栈, ...
- 【图解数据结构】 栈&队列
[TOC] 勤于总结,持续输出! 1.栈 1.1栈的定义 栈(stack)是限定在表尾进行插入和删除的操作的线性表. 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不包 ...
- 数据结构 栈&队列
2-4 依次在初始为空的队列中插入元素a,b,c,d以后,紧接着做了两次删除操作,此时的队头元素是( ) 删除,移动头指针: 增加,移动尾指针: 删除a,b ,队头c 2-3 在一个链队列中,fron ...
- day22 栈 , 队列 , 约束和反射
#!/usr/bin/env python# -*- coding:utf-8 -*- # 1.请使用面向对象实现栈(后进先出)"""class Account: def ...
- 栈&队列
队列部分 普通队列 举个形象的例子:排队买票. 有一列人在排队买票,前面来的人买完票就离开,后面来的人需要站在最后--依次类推. 在计算机中,数据结构队列有一个头指针和尾指针,头指针加一就代表有一个数 ...
随机推荐
- 200万年薪请不到!清华姚班到底有多牛X?
前几天,清华大学自动化系2020年大一新生的C++作业因为太难而上了热搜,该话题在知乎上的热度一度高达 1300+ 万.  在该帖子下方,有很多关于这件事的讨论,其中很多不禁赞叹"清华太牛 ...
- 案例(一) 利用机器算法RFM模型做用户价值分析
一.案例背景 在产品迭代过程中,通常需要根据用户的属性进行归类,也就是通过分析数据,对用户进行归类,以便于在推送及转化过程中获得更大的收益. 本案例是基于某互联网公司的实际用户购票数据为研究对象, ...
- git :error: bad signature fatal: index file corrupt
删除.git/index文件再执行: git reset 不行的话就执行: git read-tree --empty https://stackoverflow.com/questions/213 ...
- P2756 飞行员配对方案问题 网络流
P2756 飞行员配对方案问题 #include <bits/stdc++.h> using namespace std; , inf = 0x3f3f3f; struct Edge { ...
- 手写一个简版 asp.net core
手写一个简版 asp.net core Intro 之前看到过蒋金楠老师的一篇 200 行代码带你了解 asp.net core 框架,最近参考蒋老师和 Edison 的文章和代码,结合自己对 asp ...
- 阿里面试官必问的12个MySQL数据库基础知识,哪些你还不知道?
数据库基础知识 1.为什么要使用数据库 (1)数据保存在内存 优点: 存取速度快 缺点: 数据不能永久保存 (2)数据保存在文件 优点: 数据永久保存 缺点: 1)速度比内存操作慢,频繁的IO操作. ...
- Write a merge sort program
Merge Sort- Recursion Write a merge sort program in JavaScript. Sample array : [34, 7, 23, 32, 5, 62 ...
- idea的生成类注释和方法注释
sttings中选择 类注释 /** * @program: ${PROJECT_NAME} * * @description: ${description} * * @author: xiaozha ...
- docker的镜像加速
docker加速配置 1,阿里云镜像加速 1.登录:https://dev.aliyun.com/search.html 2.登录阿里云 搜索 容器镜像服务 找到后如下图 ‘ 您可以通过修改da ...
- redis配置文件.conf和常用配置
1,配置文件在哪 2,Units单位 1 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit 2 对大小写不敏感 3,INCLUDES包含 和我们的spring配置文件类似,可 ...