题目
栈和队列的区别、适用场景
答案
@[toc] --- ## 栈的定义 栈就是**操作受限的线性表**,先进后出 **FILO(First In Last Out),底层基于数据实现** 一般设立栈顶指针初值为 `top = -1`(栈空) ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/img/20201231135540.png) ⭐ 从栈顶出队,从栈顶进队 **进栈**:`top ++;` ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/img/20201231135847.png) **出栈**:`top --;` ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/img/20201231140301.png) ## 队列的定义 同样也是操作受限的线性表,底层也是基于数组实现,顺序是**先进先出 FIFO**:从队尾进队,从队头出队 ## 栈和队列的适用场景 **栈的应用场景**: - 方法调用:当一个方法被调用时,程序会将当前的执行状态压入栈中,当方法执行完毕时,再从栈中弹出状态以返回原来的执行点。 - 表达式求值:通过两个栈实现,一个存储操作数,一个存储操作符,依据运算符的优先级进行计算。 - 历史撤销:某些应用程序可以通过在栈中存储先前状态的方式来支持历史记录和撤消操作。 - 括号匹配:利用栈的后进先出的特性,对于每个左括号,将其相应的右括号推入栈中,遇到右括号时,弹出栈顶元素与之匹配,如果匹配则继续,不匹配则说明括号不匹配。 **队列的应用场景**: - 任务调度:多个任务需要被执行,通过将任务加入队列,按照 FIFO 的规则(先来的任务先处理)依次执行。 - 消息传递:多个线程之间需要通信,可以通过队列实现消息的传递和处理(先发送的消息先消费)。 - 缓存管理:某些应用程序可以通过队列实现缓存的管理,当缓存满时,先进入队列的数据将被替换出去,实现数据的更新(比如 LRU 算法)。