编程科技探索

两种排队方式

队列先来先服务,栈后来先走——数据排队大有学问。

7-10岁6分钟编程 · 数据结构 · 计算机
图片加载中…

你排队买冰淇淋,先到的先买到,这叫“先来先服务”。你叠盘子,最后放的最先拿,这叫“后来先走”。电脑里存数据也有这两种排队方式:先来先出的叫“队列”,后来先出的叫“栈”。它们是最基本的数据结构,程序里到处都在用。

你知道吗

你知道吗?你按“返回”按钮能一层层退回上一个页面,靠的就是栈——每打开一个页面就“压”进栈,按返回就“弹”出最上面的,回到前一个。

队列和栈的区别

队列像食堂打饭的队伍:新来的人排在后面(入队),前面的人打完饭走掉(出队)。先进先出,英文叫 FIFO。打印机的任务、客服的排队、外卖的订单,都用队列——谁先来谁先处理,公平。栈像一摞盘子:新盘子放最上面(压栈),拿也拿最上面(出栈)。后进先出,叫 LIFO。

为什么需要两种呢?因为不同场景要不同的规矩。排队要公平,就用队列;回退、撤销要用最近的状态,就用栈。比如你编辑文档时按 Ctrl+Z 撤销,撤销的是最近一步——这就要用栈记住每一步操作,最近的最先撤销。再比如函数调用,A 调用 B、B 调用 C,返回时 C 先回、B 再回、A 最后回,也是栈。

  • 队列:先进先出 FIFO,像打饭排队
  • 栈:后进先出 LIFO,像叠盘子
  • 撤销操作用栈,最近的最先撤销
  • 打印机任务用队列,先来先打印
  • 函数调用用栈记录返回点

理解队列和栈,能帮你设计很多功能。做个聊天 App,新消息来要排队显示;做个画画 App,撤销用栈;做个迷宫求解,用栈走回头路。看似简单的排队方式,决定了程序的行为。高级的数据结构(树、图)很多也是在这两个基础上搭起来的。

动手试试

动手玩:用一摞书玩“栈”——一本本往上叠,再一本本从顶上拿走,体会后进先出。再用玩具小人排“队列”——一个接一个排好,前面的先“出队”,体会先进先出。再想想:超市结账、电梯按楼层、浏览器后退,分别用哪种?把它们分类记下来。最后试试用 Scratch 做一个“撤销”按钮,用列表当栈存每一步。

排队的规矩,决定程序的脾气。——编程小语