说到编程里的栈和队列,很多人一开始都会搞混。尤其是听到“先入先出”这种说法时,到底指的是哪一个?其实答案很简单:队列是先入先出,栈是后入先出。
队列:排队买奶茶的逻辑
想象一下你去网红奶茶店买饮料,前面排了五个人。你排在第六位,只有前面的人都拿到奶茶离开后,才能轮到你。这就是典型的“先入先出”(FIFO, First In First Out)——最早进入队列的元素,最先被处理。
在程序中,队列常用于任务调度、消息传递等场景。比如打印机接到多个打印请求,就会按顺序一个个处理,不会插队。
// JavaScript 模拟一个简单的队列操作
let queue = [];
queue.push("任务1"); // 入队
queue.push("任务2"); // 入队
let firstTask = queue.shift(); // 出队,取走最早的任务
console.log(firstTask); // 输出:任务1
栈:叠盘子的日常比喻
再来看栈。你可以把它想象成餐厅里叠在一起的盘子。每次新盘子都放在最上面,取的时候也只能从最上面拿。最后一个放上去的,反而是第一个被取走的。这就是“后入先出”(LIFO, Last In First Out)。
浏览器的“返回上一页”功能就是用栈实现的。你从首页点进详情页,再跳转到评论页,点击返回时,会依次回退,而不是直接回到首页。
// JavaScript 模拟栈的操作
let stack = [];
stack.push("页面A"); // 入栈
stack.push("页面B"); // 入栈
let currentPage = stack.pop(); // 出栈,取最上面的页面
console.log(currentPage); // 输出:页面B
别再混淆:记住名字就能分清
其实光看名字也能猜出来。队列(Queue)听起来就像“排队”,自然讲究顺序;而栈(Stack)像是一摞东西堆起来,只能动最顶上的。
在写代码时,选对结构很重要。如果你需要按顺序处理任务,就用队列;如果要实现撤销、回退这类功能,栈更合适。