数据结构基础
低頻约 27 分钟5 个术语过去问 7 题
本单元目标
- 能说明列表中各元素如何通过指针串联起来。
- 能根据取出数据的顺序区分栈与队列。
- 能说明树结构中的根、节点、叶,以及二叉树对子节点数量的限制。
术语总表(5 个)
术语
列表(リスト)是一种数据结构:每个元素都带有指向下一个元素位置的指针,靠这些指针把数据串成一列。
在图中的例子里,从开头的苹果沿指针往下走,读出的顺序是橘子、葡萄。排列顺序由指针决定,所以不必和数据实际存放的位置顺序一致。在中间插入或删除元素时,只需改写前后的指针,其他元素都不用挪动。
类比就像寻宝游戏里的纸条。第一张纸条上写着下一张藏在哪里,一张张找下去,最后就能走到终点。
记法英语 list 的意思是“清单、名册”。可以想象成把名册的每一行用“下一个在这儿”的箭头连起来。
考点
- 易混数组(配列)把元素放在连续的位置上,按编号直接访问。列表(リスト)靠指针决定下一个元素,因此调整顺序或插入时不必移动元素。
栈(スタック)是一种像叠东西一样存放数据、从最新放入的开始取出的后进先出(後入れ先出し,LIFO:Last In First Out)数据结构。
存入的操作叫压栈(push),取出的操作叫出栈(pop),两者都始终在最上面这一个位置进行。在 Web 浏览器里按“后退”,会从刚看过的页面开始一页页往回退,这就是身边的一个例子。
类比就像桌上叠起来的一摞书。新书放在最上面,拿的时候也从上面拿,所以最后放上去的书最先回到手里。
记法英语 stack 的意思是“一摞、堆叠”,和干草堆 haystack 里的 stack 是同一个词。
考点
- 常考栈(スタック)下一次取出的,是当时已存放的数据中最晚放入的那一个。
- 常考同时放在栈(スタック)里的两个数据,后放入的一定先被取出。违背这一关系的取出顺序无法实现。
该术语的过去问 3 题 スタック →
队列(キュー)是一种按存入顺序取出数据的先进先出(先入れ先出し,FIFO:First In First Out)数据结构。
数据从队尾加入,从队头取出。存入的操作叫入队(enqueue),取出的操作叫出队(dequeue)。打印机按到达顺序处理收到的打印请求,用的就是这种机制。
类比就像窗口前排队办事。后来的人排在队尾,叫号则从先来的人开始。
记法英语 queue 的意思是“排队的队伍”,英式英语里排队就说 queue up。
考点
- 常考从队列(キュー)中第 k 次取出的,就是第 k 个存入的数据。即使中途追加数据,先进去的数据也不会被后来者超过。
- 易混栈(スタック)从最新的数据开始取,队列(キュー)从最旧的数据开始取。两者的差别不在存入方式,而在于从哪一端取出。
该术语的过去问 1 题 キュー →
树结构(木構造)是一种表示数据的节点(節)按父子关系逐层分叉、连成层级的数据结构。
位于最上层、没有父节点的节点叫根(root),位于末端、没有子节点的节点叫叶(leaf),根以外的每个节点都恰好有 1 个父节点。它适合表示组织结构图、文件夹层级这类上下级关系或包含关系。
类比就像电脑里的文件夹。一个文件夹里可以放好几个文件夹,里面又可以再放文件夹或文件。
记法画的时候像一棵倒过来的树,所以根在上,叶在下。
考点
- 易混在列表(リスト)中,每个元素后面最多连着 1 个元素;而在树结构(木構造)中,一个节点下面可以连着多个子节点。
- 易混根(根)是没有父节点的节点,叶(葉)是没有子节点的节点。一棵树只有 1 个根,但叶可以有多个。
二叉树(2分木)是每个节点的子节点限定为左子节点和右子节点、最多 2 个的树结构。
左右子节点要区分对待,允许存在只有 1 个子节点的节点,也允许存在没有子节点的叶。比如按数值大小把数据分到左右两侧存放,查找目标值时要经过的节点就会变少。
类比就像按“是 / 否”往下走的诊断流程图。每个问题往下最多分成“是”和“否”两个方向,也有只有一边接着往下走的问题,或者到此给出结果、不再往下的问题。
记法“二叉”就是分成两杈,想象一根分成两股的树枝即可。
考点
- 易混二叉树(2分木)中的“二”是子节点数量的上限,并不是说每个节点都恰好有 2 个子节点。
要点
- 向列表插入或删除元素,只需改写前后的指针,其他元素不动。
- 同时放在栈里的数据,越是后放入的越先被取出。
- 在队列中,第 k 次取出的数据就是第 k 个存入的数据。
- 在树结构中,最上层没有父节点的节点是根,没有子节点的节点是叶;二叉树把每个节点的子节点限定在 2 个以内。
查看这个领域的全部过去问 →