1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-25 02:27:10 +08:00

Update 线性数据结构.md

89 队列->栈
308 实现->现实
This commit is contained in:
DONTWATTOSLEEP 2021-01-08 15:53:12 +08:00 committed by GitHub
parent 4d54264ffd
commit 3e8b992532
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -88,7 +88,7 @@
**栈** (stack)只允许在有序的线性数据集合的一端(称为栈顶 top进行加入数据push和移除数据pop。因而按照 **后进先出LIFO, Last In First Out** 的原理运作。**在栈中push 和 pop 的操作都发生在栈顶。**
栈常用一维数组或链表来实现,用数组实现的队列叫作 **顺序栈** ,用链表实现的队列叫作 **链式栈**
栈常用一维数组或链表来实现,用数组实现的栈叫作 **顺序栈** ,用链表实现的栈叫作 **链式栈**
```java
假设堆栈中有n个元素。
@ -305,6 +305,6 @@ myStack.pop();//报错java.lang.IllegalArgumentException: Stack is empty.
- **阻塞队列:** 阻塞队列可以看成在队列基础上加了阻塞操作的队列。当队列为空的时候,出队操作阻塞,当队列满的时候,入队操作阻塞。使用阻塞队列我们可以很容易实现“生产者 - 消费者“模型。
- **线程池中的请求/任务队列:** 线程池中没有空闲线程时,新的任务请求线程资源时,线程池该如何处理呢?答案是将这些请求放在队列中,当有空闲线程的时候,会循环中反复从队列中获取任务来执行。队列分为无界队列(基于链表)和有界队列(基于数组)。无界队列的特点就是可以一直入列,除非系统资源耗尽,比如 `FixedThreadPool` 使用无界队列 `LinkedBlockingQueue`。但是有界队列就不一样了,当队列满的话后面再有任务/请求就会拒绝,在 Java 中的体现就是会抛出`java.util.concurrent.RejectedExecutionException` 异常。
- Linux 内核进程队列(按优先级排队)
- 现生活中的派对,播放器上的播放列表;
- 现生活中的派对,播放器上的播放列表;
- 消息队列
- 等等......