超市收银系统里的队列
在超市排队结账时,大家默认遵守先来先服务的规则。这种逻辑在程序中就是“队列”数据结构的体现。收银系统把每位顾客的购物清单按顺序加入队列,逐个处理。一旦有人插队或者系统乱序处理,就会出错。队列的“先进先出”特性,正是这类场景的核心支撑。
地图导航中的图结构
打开手机地图查路线,输入起点和终点,几秒内就能得到最优路径。这背后靠的是“图”这种数据结构。城市道路被抽象成节点和边,每个路口是节点,每条路是边,再结合实时交通数据赋予权重。算法遍历这张图,找出最短或最快路线。没有图结构,导航只能靠人工记忆,根本没法实时响应。
浏览器历史记录与栈
点击浏览器的“返回”按钮,页面一层层退回到之前访问的站点。这个功能依赖“栈”结构实现。每次进入新页面,地址被压入栈顶;点返回时,栈顶元素弹出,回到上一个页面。就像一摞盘子,只能从最上面取。如果换成其他结构,返回功能可能跳错页甚至崩溃。
通讯录查找背后的哈希表
手机通讯录动辄上千联系人,但搜索名字几乎瞬间出结果。这得益于哈希表的应用。系统把姓名通过哈希函数转换成唯一索引,直接定位存储位置,避免逐个比对。比如搜“张伟”,不用翻遍所有条目,一次计算就能命中。要是只用数组顺序查找,等结果出来人都走神了。
文件夹嵌套与树形结构
电脑里的文件夹可以包含子文件夹,层层展开像一棵倒长的树。这就是典型的“树”结构。根目录是树根,每个子目录是分支,文件则是叶子。资源管理器能快速展开、折叠、统计某个目录下的总大小,都是基于树的遍历和层级关系设计的。如果用线性结构存储,找一个深层文件得翻半天。
电商库存管理中的数组
某电商平台卖手机,每款机型对应一个库存数字。这些数据通常用数组或类似结构组织。比如用索引0代表iPhone,1代表华为,2代表小米,对应值就是剩余数量。每当下单成功,系统就对相应位置减1。这种连续存储方式访问速度快,适合高频读写。要是用链表,每次都要从头找机型位置,用户早就关掉页面了。
代码示例:简单的队列实现
class Queue {
constructor() {
this.items = [];
}
enqueue(element) {
this.items.push(element);
}
dequeue() {
return this.items.shift();
}
isEmpty() {
return this.items.length === 0;
}
}这个 JavaScript 实现的队列,可以用在模拟排队系统中。比如医院挂号、餐厅取号,都能基于此类模型开发核心逻辑。