Py算法与数据结构

03 什么是数据结构?

抽象接口、封装、对象与引用

对应本节 12 道题。点击题目展开答案和理由,保留此前生成的详细解析。
第 01 题 问题 1

栈 ADT 必须规定用列表实现吗?

参考答案

不必须。

解析

ADT 规定 push/pop 的行为及 LIFO,实现可用列表或链表。

第 02 题 问题 2

抽象字典与 Python dict 完全是同一概念吗?

参考答案

不是。

解析

抽象字典规定按键插入、搜索、删除;dict 是通常由哈希表实现的具体类型。

第 03 题 问题 3

ListStack 连续 push(10)、push(20)、pop() 返回什么?

参考答案

20。

解析

取最近压入的顶部记录,遵循后进先出。

第 04 题 问题 4

单下划线 _items 会强制阻止外部访问吗?

参考答案

不会。

解析

它是实现细节的命名约定;封装还依赖接口和调用方遵守规则。

第 05 题 问题 5

为什么用 Signal.RED 比状态数字 1 更清楚?

参考答案

枚举显式命名合法状态,减少魔法数字的歧义。

解析

枚举本身不负责状态转移,仍要实现控制规则。

第 06 题 问题 6

Student 的 name: str 标注会自动拦截所有非字符串赋值吗?

参考答案

不会。

解析

普通 Python 类型标注不是全面的运行时校验,需要显式验证或检查工具。

第 07 题 问题 7

a=[student]; b=a.copy(); b[0].score=95,a[0].score 会变吗?

参考答案

会变为 95。

解析

外层列表是副本,内层仍引用同一个可变 Student 对象。

第 08 题 问题 8

函数中 items.append(3) 与 items=[99] 对调用者的影响相同吗?

参考答案

不同。

解析

前者修改共享列表;后者只重绑定局部名称。

第 09 题 问题 9

节点 next=None 表示什么?

参考答案

该节点没有下一节点。

解析

Python 用对象引用表达链接,不需要 C 式地址算术。

第 10 题 问题 10

del name 能保证该对象立刻消失吗?

参考答案

不能。

解析

它删除名称绑定,其他容器或节点仍可能持有对象引用。

第 11 题 问题 11

双向链表插入时只改一个 next 就足够吗?

参考答案

一般不足。

解析

相邻 prev 与 next 必须相互一致;公开操作完成后应恢复不变式。

第 12 题 问题 12

同一接口的两种实现可以只比较功能、不比较成本吗?

参考答案

不应。

解析

行为可以兼容,但时间、空间、边界与资源管理成本可能不同。