03 什么是数据结构?
抽象接口、封装、对象与引用
第 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
同一接口的两种实现可以只比较功能、不比较成本吗?
参考答案
不应。
解析
行为可以兼容,但时间、空间、边界与资源管理成本可能不同。