跳到正文

1.0 数据结构在学什么

35 分钟

数据结构到底解决什么问题

同学,先别急着背链表和二叉树。今天先解决第一个困难:现实问题只有人物、事件和规则,计算机却只能处理被编码的数据。我们要完成三次转换——识别对象,表达关系,再选择能高效执行操作的存储方式。

看一个排队叫号系统。现实对象是顾客;每位顾客至少有号码、人数、到店时间等数据项;“先来先服务”形成线性次序;取号、叫号、取消、查询等待人数是必须支持的操作。若只问“谁下一个”,队列很自然;若还要频繁按手机号撤销,就需要额外索引。结构的好坏从来不脱离要做的操作。

以后学每一种结构,都按同一张检查表推进:

  1. 逻辑结构:元素之间是一对一、一对多还是多对多?
  2. 存储结构:顺序、链式、索引或散列怎样落到内存?
  3. 数据运算:查找、插入、删除、遍历分别怎样做?
  4. 成本:时间、额外空间和实现复杂度是多少?

陪做一个建模判断。通讯录若主要按姓名精确查询,散列表能把“名字到联系人”的映射作为核心;若还要按拼音顺序浏览,仅有散列表就不够,应增加有序结构。依据不是哪个结构听起来高级,而是它是否匹配主要操作与性能约束。

针对性错解:把“数据结构”理解成一段固定代码,会混淆抽象规则与具体实现;只会画节点却不说明允许哪些操作,也没有完成建模;一看到排队就永远选队列,则忽略了撤销、优先级等新需求。

迁移任务:为外卖订单系统写出数据元素、两种关系、三个高频操作,并分别提出一种候选结构。参考答案:订单是元素;可有按时间的线性关系和商家—订单的一对多关系;常见操作是按编号查询、插入新单、按状态筛选;可用哈希索引配合按时间队列。独立验收是能对一个未见过的系统完成“对象—关系—操作—成本”四步说明。下一课把数据、数据元素、逻辑结构和存储结构的边界说准确。

小纸条

不看正文,完成“1.0 数据结构在学什么”中的独立验收任务。

登录 后可看答案

Practice

本课练习

0

先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。

本课练习正在补齐,暂不应标记为完成。