文章

281

粉丝

0

获赞

0

访问

47.1k

头像
2015年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年10月19日 11:12
阅读数 150


评分及理由

(1)得分及理由(满分3分)

得分:2分

理由:学生答案提到使用辅助数组记录结点data的绝对值,并利用两个指针进行删除操作,基本思路正确。但描述不够完整,没有明确说明辅助数组的用途是标记首次出现的绝对值,也没有详细说明当出现重复时如何删除结点。标准答案中明确说明了检查q[|data|]的值,如果为0则保留并标记为1,否则删除,这部分关键细节学生答案没有完整表达。

(2)得分及理由(满分2分)

得分:2分

理由:学生答案使用C语言正确定义了单链表结点的数据类型,包含data和next指针,与标准答案一致,只是变量名略有不同(link vs next),这不影响得分。

(3)得分及理由(满分8分)

得分:4分

理由:学生答案的算法实现存在以下逻辑错误:
1. 辅助数组初始化循环条件错误:for(int i = 0; i < n; i++) 应该初始化n+1个元素(i从0到n),这里只初始化了n个,导致数组最后一个元素未初始化。
2. 在删除结点时,只修改了pre->next,但没有释放被删除结点的内存,会造成内存泄漏。
3. 指针移动逻辑错误:在删除结点后,p和pre的移动不正确。当删除p指向的结点时,p应该移动到p->next,但pre不应该移动,因为pre->next已经指向了新的下一个结点。学生答案中无论是否删除,p和pre都向后移动,这会导致在删除结点后pre指向错误的位置。
4. 函数中使用了动态数组int A[n+1],这在C语言中不是标准写法(C99支持变长数组,但考试中通常要求使用malloc动态分配)。
这些逻辑错误影响了算法的正确性。

(4)得分及理由(满分2分)

得分:1分

理由:学生答案正确分析了空间复杂度为O(n),但时间复杂度分析不准确。第一次识别结果写的是O(m)正确,但第二次识别结果写的是O(n)错误,应该根据链表长度m来分析。由于存在矛盾且部分错误,扣1分。

题目总分:2+2+4+1=9分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发