知识卡片

栈与队列:靠限制访问方式产生新保证

专业/工作 · 1292.a

内容

栈和队列都是对普通列表施加访问限制后得到的特化结构:栈只允许在表头(栈顶)添加和删除,因此最后放入的项总是最先被取出(后进先出,LIFO),天然适合需要按与存储顺序相反的次序检索的场景,例如支持递归调用——每次新的函数激活都要把前一次激活”搁置”起来,用栈存放这些被搁置的激活,检索时最上面的永远是正确要恢复的那个;队列只允许从表头移除、从表尾插入,先进入的先被取出(先进先出,FIFO),适合按到达顺序处理任务的场景,如作业队列或数据传输缓冲区。发散:栈和队列的价值不在于它们能存什么,而在于它们主动放弃了普通列表”任意位置读写”的自由度、换来一个更强、更可预期的行为保证——这是一种常见的抽象设计手法:约束越多,接口暴露的可能性越少,使用者反而越容易正确、安全地使用它,因为错误的用法在接口层面根本无法表达。

参考来源

《计算机科学概论》第8章《数据抽象》