数据结构与算法之美--知识点四:栈、队列

08 | 栈:如何实现浏览器的前进和后退功能?

用数组实现的栈,叫做顺序栈;用链表实现的栈,叫做链式栈

函数调用栈?表达式求值(保存操作数的栈、保存运算符的栈,操作符优先级比较),括号匹配

内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构。内存空间在逻辑上分为三部分:代码区、静态数据区和动态数据区,动态数据区又分为栈区和堆区。

代码区:存储方法体的二进制代码。高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)控制代码区执行代码的切换。
静态数据区:存储全局变量、静态变量、常量,常量包括final修饰的常量和String常量。系统自动分配和回收。
栈区:存储运行方法的形参、局部变量、返回值。由系统自动分配和回收。
堆区:new一个对象的引用或地址存储在栈区,指向该对象存储在堆区中的真实数据。

09 | 队列:队列在线程池等有限资源池中的应用

顺序队列,链式队列

当队列满时,tail指向的位置实际上是没有存储数据的。所以,循环队列会浪费一个数组的存储空间。队空、队满的判定条件

阻塞队列,生产者-消费者模型

并发队列,线程安全的队列

对于大部分资源有限的场景,当没有空闲资源时,基本上都可以通过队列这种数据结构来实现请求排队。线程池,数据库连接池

如何实现无锁并发队列:CAS实现无锁队列,Disruptor(之后有一讲)

高性能队列Disruptor、Linux环形缓存,用到了循环并发队列;Java concurrent并发包利用ArrayBlockingQueue来实现公平锁

你可能感兴趣的:(Algorithm)