茶艺师学算法打卡4:栈、队列
前言
“先进先出”“先进后出”,相信大家都听过,而这很形象地形容了栈与队列。
学习笔记
- 栈是“操作受限制”的线性数据结构。所谓“操作受限制”,是指只能在一端插入数据或者删除数据。它能用数组实现,也能用链表实现。
- 一开始理解不了为什么会有“先进后出”的操作与栈这样的数据结构,在看到了浏览器能回退至之前的浏览过的页面,Word 或者 Excel 里的“撤销操作”,恍然大悟。
- 与栈相关的有名算法题,就是用栈模拟出一个能加减乘除、甚至能处理括号正负号的计算器。
- 队列也是“操作受限制”的线性数据结构,它是一端只能进,另一端只能出,从而保证了“先进先出”,(也有两头都能进与出的队列,叫“双端队列”)。它能用数组实现,也能用链表实现。
- 生产者-消费者模型、Kafka消息队列,就是队列的实际应用。
结语
学到这里,我最近感觉到,比起数组与链表,栈与队列更多的像是一种概念。
举个例子,栈,使用某种【底层数据结构】,实现出只能在一端插入数据或者删除数据的功能。
这个【底层数据结构】,可以是数组,也可以说链表,也可以是别的东西。