前言
队列、堆栈和优先队列是编程中常见的数据结构。本文首先简单介绍一下这几种数据结构,然后介绍如何用Redis实现这些数据结构。
数据结构简介
队列
普通队列有以下几个特性
- 先进先出(FIFO)
- 支持PUSH/POP,PUSH从尾端增加元素,POP从前端弹出元素
- 容量不受限制
从普通队列可以衍生出定长队列,它比普通队列多出以下特性
- 有固定的容量(最大长度)
- 向满载的队列PUSH会失败
从定长队列可以衍生出可溢出的定长队列,它比定长队列多出以下特性
- 向满载的队列PUSH会成功,但前端的元素会被挤出
以上三种队列都是单向队列,只能从尾端PUSH,从前端POP。它们又分别可以衍生出各自的双向版本。
双向 队列/定长队列/可溢出的定长队列
比单向版本多处以下特性
- PUSH/POP均可以从前端/后端进行
- 对于可溢出的双向队列,满载时从一端PUSH,会从另一端将元素挤出
堆栈
普通堆栈有以下特性
- 后进先出 (LIFO)
- 支持PUSH/POP,从尾端追加/弹出元素
- 容量不受限制
衍生出的