文章

26

粉丝

93

获赞

1

访问

1.5k

头像
2009年计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年9月6日 21:47
阅读数 89


评分及理由

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

学生描述的基本设计思想是:先遍历链表获取长度len,再通过len-k计算正数位置进行第二次遍历找到结点。该方法需要两遍扫描链表,而标准答案要求尽可能高效(一趟扫描)。虽然思路正确,但效率不如标准答案的一趟扫描方法。根据评分说明,若采用两遍扫描最高给10分(但此处是设计思想部分,单独评分)。考虑到设计思想描述清晰且正确,但未达到最优效率,扣1分。得4分。

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

学生详细实现步骤与设计思想一致:先计算长度len,再判断len-k是否有效,最后二次遍历到目标结点。步骤描述正确,但同样未实现一趟扫描的高效要求。步骤分扣1分。得4分。

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

代码实现存在以下问题:
1. 函数参数缺少k(应为int num(LinkList list, int k)),但根据上下文可能为识别错误(误写),不扣分。
2. 计算长度时,while循环条件为p->next != NULL,这会漏掉最后一个结点(正确应为p != NULL),导致len少1,逻辑错误。扣2分。
3. for循环条件i <= len-k会多移动一次(应为i < len-k),因为从头结点开始移动len-k次可到目标结点(头结点不算数据结点)。但学生代码中list是表头结点,第一次移动后到第一个数据结点,所以循环次数应为len-k次(i从0到len-k-1),但代码中i<=len-k会移动len-k+1次,导致指向错误位置。逻辑错误,扣2分。
4. 成功时应返回1并输出data,但代码直接返回data(返回类型为int,但实际返回的是data值,而函数声明返回int且应返回0/1)。逻辑错误,扣1分。
代码部分因多处逻辑错误,最多得0分。但考虑到识别可能误写(如参数k缺失),且核心思路正确(两遍扫描),根据评分说明(两遍扫描最高10分,但代码部分满分5分),给予1分(思路正确但实现有误)。

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

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发