跳到正文

数据结构基础

低頻约 27 分钟5 个术语过去问 7 题

本单元目标

  • 能说明列表中各元素如何通过指针串联起来。
  • 能根据取出数据的顺序区分栈与队列。
  • 能说明树结构中的根、节点、叶,以及二叉树对子节点数量的限制。
术语总表(5 个)
术语一句话形状取出 / 遍历方式
リスト用指针把元素连成一列的结构一列(线性)从开头起沿指针依次往下走
スタック后进先出(LIFO)的结构一列(线性)从最后放上去的开始取
キュー先进先出(FIFO)的结构一列(线性)从最先放进去的开始取
木構造节点按父子层级分叉展开的结构层级(分叉)从最上层的节点往子节点走
2分木每个节点最多有 2 个子节点的树结构层级(分叉)从最上层的节点往左右子节点走

术语

列表(リスト)是一种数据结构:每个元素都带有指向下一个元素位置的指针,靠这些指针把数据串成一列。

位置数据指针(下一个位置)
1(开头)苹果3
2葡萄无(末尾)
3橘子2

在图中的例子里,从开头的苹果沿指针往下走,读出的顺序是橘子、葡萄。排列顺序由指针决定,所以不必和数据实际存放的位置顺序一致。在中间插入或删除元素时,只需改写前后的指针,其他元素都不用挪动。

类比就像寻宝游戏里的纸条。第一张纸条上写着下一张藏在哪里,一张张找下去,最后就能走到终点。

记法英语 list 的意思是“清单、名册”。可以想象成把名册的每一行用“下一个在这儿”的箭头连起来。

考点

  • 易混数组(配列)把元素放在连续的位置上,按编号直接访问。列表(リスト)靠指针决定下一个元素,因此调整顺序或插入时不必移动元素。

栈(スタック)是一种像叠东西一样存放数据、从最新放入的开始取出的后进先出(後入れ先出し,LIFO:Last In First Out)数据结构。

  1. 放入红色
  2. 放入蓝色
  3. 取出:蓝色
  4. 取出:红色

再取一次,剩下的红色被取出。

4 / 4

存入的操作叫压栈(push),取出的操作叫出栈(pop),两者都始终在最上面这一个位置进行。在 Web 浏览器里按“后退”,会从刚看过的页面开始一页页往回退,这就是身边的一个例子。

类比就像桌上叠起来的一摞书。新书放在最上面,拿的时候也从上面拿,所以最后放上去的书最先回到手里。

记法英语 stack 的意思是“一摞、堆叠”,和干草堆 haystack 里的 stack 是同一个词。

考点

  • 常考栈(スタック)下一次取出的,是当时已存放的数据中最晚放入的那一个。
  • 常考同时放在栈(スタック)里的两个数据,后放入的一定先被取出。违背这一关系的取出顺序无法实现。

该术语的过去问 3 题 スタック

队列(キュー)是一种按存入顺序取出数据的先进先出(先入れ先出し,FIFO:First In First Out)数据结构。

  1. 放入红色
  2. 放入蓝色
  3. 取出:红色
  4. 取出:蓝色

再取一次,接着排队的蓝色被取出。

4 / 4

数据从队尾加入,从队头取出。存入的操作叫入队(enqueue),取出的操作叫出队(dequeue)。打印机按到达顺序处理收到的打印请求,用的就是这种机制。

类比就像窗口前排队办事。后来的人排在队尾,叫号则从先来的人开始。

记法英语 queue 的意思是“排队的队伍”,英式英语里排队就说 queue up。

考点

  • 常考从队列(キュー)中第 k 次取出的,就是第 k 个存入的数据。即使中途追加数据,先进去的数据也不会被后来者超过。
  • 易混栈(スタック)从最新的数据开始取,队列(キュー)从最旧的数据开始取。两者的差别不在存入方式,而在于从哪一端取出。

该术语的过去问 1 题 キュー

「栈」与「队列」的区别

比较点栈队列
关键取出顺序从最后放入的开始(LIFO)从最先放入的开始(FIFO)
存取位置都在最上面这一个位置从队尾放入,从队头取出
操作名称压栈(push)/ 出栈(pop)入队(enqueue)/ 出队(dequeue)
身边的例子浏览器的“后退”排队等待的打印请求

树结构(木構造)是一种表示数据的节点(節)按父子关系逐层分叉、连成层级的数据结构。

  • 总经理
    • 销售部
      • 销售一科
      • 销售二科
    • 开发部
      • 开发科

下面继续接着节点,到没有子节点的节点处分支结束。

3 / 3

位于最上层、没有父节点的节点叫根(root),位于末端、没有子节点的节点叫叶(leaf),根以外的每个节点都恰好有 1 个父节点。它适合表示组织结构图、文件夹层级这类上下级关系或包含关系。

类比就像电脑里的文件夹。一个文件夹里可以放好几个文件夹,里面又可以再放文件夹或文件。

记法画的时候像一棵倒过来的树,所以根在上,叶在下。

考点

  • 易混在列表(リスト)中,每个元素后面最多连着 1 个元素;而在树结构(木構造)中,一个节点下面可以连着多个子节点。
  • 易混根(根)是没有父节点的节点,叶(葉)是没有子节点的节点。一棵树只有 1 个根,但叶可以有多个。

「列表」与「树结构」的区别

比较点列表树结构
关键后面连着的元素最多 1 个可以连着多个子节点
形状一列(线性)层级(分叉)
两端的叫法开头 / 末尾根 / 叶

二叉树(2分木)是每个节点的子节点限定为左子节点和右子节点、最多 2 个的树结构。

  • 根
    • 左子节点
      • 叶
      • 叶
    • 右子节点
      • 叶

左右子节点要区分对待,允许存在只有 1 个子节点的节点,也允许存在没有子节点的叶。比如按数值大小把数据分到左右两侧存放,查找目标值时要经过的节点就会变少。

类比就像按“是 / 否”往下走的诊断流程图。每个问题往下最多分成“是”和“否”两个方向,也有只有一边接着往下走的问题,或者到此给出结果、不再往下的问题。

记法“二叉”就是分成两杈,想象一根分成两股的树枝即可。

考点

  • 易混二叉树(2分木)中的“二”是子节点数量的上限,并不是说每个节点都恰好有 2 个子节点。

要点

  • 向列表插入或删除元素,只需改写前后的指针,其他元素不动。
  • 同时放在栈里的数据,越是后放入的越先被取出。
  • 在队列中,第 k 次取出的数据就是第 k 个存入的数据。
  • 在树结构中,最上层没有父节点的节点是根,没有子节点的节点是叶;二叉树把每个节点的子节点限定在 2 个以内。

确认题

从本单元的过去问中选 3 题

开始做确认题

查看这个领域的全部过去问