第 3 次作业 · 线性表与复杂度

我按课程保存的答案 PDF 整理客观题。编程题的独立题面未保存;“多项式相乘”和“词频统计”另有一份讲解 PDF,可确认其解法方向,其余仅记录提交。

选择题

1. 单向循环链表中,在 p 所指结点后插入新结点,需要修改几个指针域?

展开答案

2 个,对应 B。

2. 以 h 为头结点的单循环链表中,p 指向链尾的条件是什么?

展开答案

p->next == h,对应 A。

3. 关于线性表,“有序性”应怎样理解?题目要求选错误叙述

展开答案

“线性表的有序性是数据元素按数值由小到大或由大到小排列”错误,对应 C。线性表的“有序”指元素具有前后次序,不等于按关键字排序。

4. 外层 k*=2 到 nn、内层从 1 到 nn 的二重循环,时间复杂度是什么?

展开答案

O(nlog⁡n)O(n\log n),对应 C。

5. 把题给四个复杂度由小到大排序

展开答案

源答案为 3, 4, 1, 2,对应 B。原 PDF 中四个公式字形没有被文本层保留下来,因此这里只保留可核验的编号顺序。

6. 含 nn 个结点的链表中,等概率成功查找平均比较多少个结点?

展开答案

(n+1)/2(n+1)/2,对应 C。

7. 数据的存储结构通常分为哪几类?

展开答案

顺序、链式、索引和散列存储结构,对应 D。

8. 长度为 nn 的顺序表在第 ii 个位置插入元素,时间复杂度是什么?

展开答案

O(n)O(n),对应 C。

9. 关于线性表,哪一项叙述错误?

展开答案

“顺序存储便于插入和删除”错误,对应 B。

10. 最常做“尾部插入、删除第一个元素”时,哪种链表表示更省时间?

展开答案

仅设尾指针的单循环链表,对应 D;尾指针的后继就是首结点。

填空题

1. 20 人围成一圈从 1 开始报数,报到 2 的人出列,最后留下几号?

展开答案

9 号。

2. x 从 2 开始不断翻倍,直到不小于 n/2,时间复杂度是什么?

展开答案

O(log⁡n)O(\log n)。

3. 两重循环分别执行 nn 次和 mm 次,循环体为常数操作,复杂度是什么?

展开答案

O(mn)O(mn)。

4. i=1,j=0,循环条件为 i+j<=n,每轮把较小关系对应的一个变量加一,循环体执行多少次?

展开答案

nn 次。

5. 补全两个递增链表的合并函数

展开答案

取 p 时依次执行 r->link=p; r=p; p=p->link;;取 q 时同理。循环结束后可写 r->link = (p != NULL) ? p : q;。

6. 长度为 nn 的顺序表,在第 ii 个元素前插入,需要后移多少个元素?

展开答案

n−i+1n-i+1 个。

7. 顺序存储和链式存储在插入、删除上的复杂度分别是什么?

展开答案

顺序存储平均移动近一半元素,为 O(n)O(n);已知链表结点位置后,局部插入、删除为 O(1)O(1)。

8. 顺序表每元素占 4 个单元,首地址为 100,第 10 个元素地址是多少?

展开答案

100+(10−1)×4=136100+(10-1)\times4=136。

9. 在 p 所指结点后插入 q,两条语句是什么?

展开答案

q->link=p->link; p->link=q;。

10. 数组表示的长度为 nn 的线性表,等概率删除任一元素,平均移动多少个元素?

展开答案

(n−1)/2(n-1)/2 个。

编程题提交

连续线段

查看提交实现

提交代码遍历线段数据并维护连续关系。独立题面没有保留,无法确认“连续”的全部判定约束,故不从实现反推题意。

多项式相乘

查看提交实现

课程保存的讲解 PDF 明确采用链表法:两输入链表结点保存系数和指数,枚举两表项相乘,再把结果按指数递减插入第三条链;指数相同则合并系数。

文件加密(环)

查看提交实现

源目录保存输入、加密结果和提交代码。实现以环式移动处理文件字符;由于教师题面和完整密钥约定未保存,这里只保留提交边界。

空闲空间申请模拟(最佳适应)

查看提交实现

提交维护空闲分区,申请时选择能够容纳请求的最小分区,分配后更新剩余空间。这对应最佳适应策略;关键不变量是空闲表始终准确覆盖尚未分配的区间。

词频统计

查看提交实现

讲解 PDF 与代码均保留:提交把不同单词放入结构数组,已存在则增加计数,否则追加新项,最后用 qsort 按单词字典序输出。线性查找已有单词使最坏代价较高,后续作业会改用树结构。

评论