闭卷重建固定数组与随机访问的ADT、表示不变量、操作与复杂度。
数据结构与抽象数据类型 · 小纸条
选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。
闭卷重建动态数组的size与capacity的ADT、表示不变量、操作与复杂度。
闭卷重建倍增策略与均摊证明的ADT、表示不变量、操作与复杂度。
闭卷重建中间插入、删除与稳定顺序的ADT、表示不变量、操作与复杂度。
闭卷重建切片、视图与复制语义的ADT、表示不变量、操作与复杂度。
闭卷重建紧凑、收缩与抖动的ADT、表示不变量、操作与复杂度。
闭卷重建实验:通用动态数组的ADT、表示不变量、操作与复杂度。
机制:动态数组把逻辑长度与已分配容量分开,append先写空位,满时分配更大块并搬移;实验:跟踪capacity为1的数组连续append八次的容量与搬移数;边界:capacity不是可访问元素数;扩容后旧迭代器或指针可能失效。
机制:连续等宽元素让地址=base+i×width,因此合法索引访问是常数时间;实验:手算二维行主序偏移并实现边界检查;边界:O(1)不等于零成本;越界、负索引和元素宽度必须按语言契约解释。
机制:保持顺序的插入要向右移动后缀,删除要向左填洞;尾部操作无需搬移后缀;实验:对给定数组逐步插入删除并输出每次移动区间;边界:覆盖方向错误会覆盖尚未搬走的元素,删除后尾槽也要按对象生命周期清理。
机制:几何扩容让总搬移形成等比级数,从而n次append总成本O(n);实验:比较1.5倍与2倍扩容的搬移、浪费和取整边界;边界:每次只加固定容量会退化成平方搬移,倍数过小也会放大常数。
机制:删除后可在size远低于capacity时收缩,但增长阈值与收缩阈值要留滞回避免反复搬移;实验:模拟容量边界附近append/pop并比较有无滞回;边界:每次删除都收缩会让交替操作退化,缩到零也会破坏下一次append。
机制:切片可能复制也可能共享底层缓冲,视图需记录起点、步长和长度并处理生命周期;实验:实现只读数组视图并验证原数组修改是否可见;边界:返回视图可让调用者越过封装;底层扩容后视图是否有效必须定义。
机制:实现append、insert、erase、get、reserve并维护size/capacity不变量和移动计数;实验:覆盖扩容、首中尾插入、非法索引和扩缩容抖动测试;边界:不得直接用Python list.insert冒充实现;代码题需显式维护缓冲与逻辑长度。