你有没有想过,为什么超市的收银台要按顺序排队?为什么快递柜要给每个包裹分配一个格子?这些看似平常的生活现象,其实背后都藏着“数据结构”的影子。
什么是数据结构?
简单说,数据结构就是组织和存储数据的方式。就像你收拾衣柜,可以把衣服堆成一堆(无序),也可以按季节、类型挂起来(有序)。不同的方式,找衣服的速度就不一样。程序也一样,选对结构,效率翻倍。
最熟悉的陌生人:数组
数组就像是电影院的座位——排好号,整整齐齐。你想找第5排第3座,直接就能定位。在代码里,它长这样:
int scores[5] = {85, 92, 78, 96, 88};
通过索引 scores[2] 就能快速拿到78这个值。但问题来了,如果想在中间插个人?就得后面所有人挪位置,代价不小。
排队背后的逻辑:链表
再看超市排队,每个人只用记住前面是谁就行,不用知道整个队列多长。这就是链表的思想——每个元素存着下一个的“线索”。插入一个人,只要改两个指针,前面的人和新来的人接上就行。
想象一下快递派送链:A送到B,B送到C。如果中途加个D在B和C之间,只要B把目的地改成D,D再指向C,链条就更新了。代码上大概像这样:
struct Node {
int data;
struct Node* next;
};
// A->B 变成 A->D->B
Node* D = new Node;
D->data = 100;
D->next = B;
A->next = D;
先来后到:队列的应用
外卖平台接单,肯定是按顺序处理。先下单的优先出餐,这就是典型的队列——先进先出(FIFO)。写代码时,用数组或链表都能实现,关键在于操作规则:一端进,另一端出。
层层嵌套:栈的使用场景
浏览器的“返回”按钮是怎么工作的?点进一个页面压入栈,再点一个再压入。按返回时,弹出当前页,回到上一个。这种后进先出(LIFO)的结构叫栈。就像一摞盘子,只能从上面拿。
查找快慢由它定:哈希表
你手机通讯录搜“张三”,一秒出结果,靠的就是哈希表。它把名字转换成一个地址,直接跳过去取数据。理想情况下,不管有多少人,都能快速找到。
当然,也可能撞名,比如两个“张三”,这就叫哈希冲突。解决办法很多,比如拉链法——把同名的串成一个小链表。
树形结构:文件夹的启示
电脑里的文件夹一层套一层,根目录下有文档、图片、下载,每个里面还能再分。这种分支结构就是“树”。最常见的二叉树,每个节点最多两个孩子。
搜索文件时,如果树是平衡的,查起来飞快。数据库索引、HTML 的 DOM 结构,都是树的应用。