文章

96

粉丝

12

获赞

0

访问

24.6k

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


评分及理由

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

得分:3分

理由:学生的基本设计思想与标准答案一致,都是使用一个大小为 n+1 的辅助数组(哈希表)来标记已经出现过的绝对值,通过一趟扫描链表,保留首次出现的结点,删除后续绝对值重复的结点。思路正确,表述清晰。

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

得分:2分

理由:学生给出了单链表结点的正确定义,使用了 typedef 和结构体,与标准答案一致。虽然第一次识别中结构体名称为 LinkNode,第二次为 LinkList(此处 LinkList 作为结点指针类型别名,但定义本身正确),不影响得分。

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

得分:5分

理由:学生的算法描述整体思路正确,但存在多处逻辑错误和语法错误,需要扣分。
扣分点如下:
1. 函数参数和变量声明错误:在第一次识别中,函数参数为 Linklist *head,但 Linklist 已被定义为指针类型,因此 head 成为二级指针,这与通常的单链表操作不符。第二次识别中参数为 LinkList &head(C++引用),但题目要求C或C++,且标准答案使用PNODE(即结点指针),此处参数类型不一致且可能引起混淆。扣1分。
2. 哈希数组定义错误:第一次识别中定义 int hashCnt[n]; 但 n 是变量,C语言中不允许变长数组(除非C99),且未考虑绝对值范围是0~n,需要 n+1 大小。第二次识别中固定大小为10000,不符合题目要求(应根据n动态分配)。扣1分。
3. 删除逻辑错误:第一次识别中,在 hash[val]==1 时执行 (p->link=q->link q=q->link ); 语法错误(缺少分号,且未释放结点),逻辑不完整。第二次识别中,在 hashCnt[val]==1 时,if (p->link == q->link) 判断无意义(始终相等?),且 else 中 free(q) 后 q = p->link 正确,但整体删除逻辑混乱。扣1分。
4. 代码不完整:未包含头文件(如 stdlib.h 用于 abs 和 free),未处理头结点(标准答案中 h 指向头结点,学生代码中 head 指向第一个结点?),且未释放辅助数组(标准答案中 free(q))。扣1分。
5. 其他小错误:如第一次识别中 hash 未定义(应为 hashCn...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发