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

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

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

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

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

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

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

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

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

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

队列

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. POJ 3026(BFS+prim)
  2. GAE初探-一鼻子灰
  3. FZU2165 v11(带权的重复覆盖)
  4. POJ-2926 Requirements 最远曼哈顿距离
  5. 【Python基础】计算项目代码行数
  6. 不用图片,纯Css3实现超酷的类似iphone的玻璃气泡效果
  7. 浅入深出之Java集合框架(下)
  8. CJOJ 2485 UVa 11991 生日礼物 / UVa 11991 Easy Problem from Rujia Liu?
  9. 从架构演进的角度聊聊Spring Cloud都做了些什么?
  10. word中正文分栏重新换页问题
  11. 《UNIX网络编程 卷1:套接字联网API》读书笔记(一):网络编程简介
  12. SAP 没有激活HUM功能照常可以使用Handling Unit
  13. 【简】题解 AWSL090429 【数塔问题】
  14. vue-创建新项目
  15. python之匿名函数lambda
  16. Informatica_(1)安装
  17. 在Mac上安装与使用mitmproxy
  18. mysql字段类型对应javabean属性
  19. java和数据结构的面试考点
  20. TMS320VC5509串口通信

热门文章

  1. Python单元测试框架:pytest
  2. 【雕爷学编程】Arduino动手做(59)---RS232转TTL串口模块
  3. jQuery中效果animate方法解决width是百分比出现的问题
  4. NPOI导入excel为datatable (xls xlsx xlsm)
  5. 机器学习决策树ID3算法,手把手教你用Python实现
  6. VMware如何克隆一个虚拟机
  7. IDEA奇淫小技巧
  8. indetityserver4-implicit-grant-types-请求流程叙述-下篇
  9. Springboot整合MybatisPlus(超详细)完整教程~
  10. eatwhatApp开发实战(七)