文章

13

粉丝

0

获赞

0

访问

1.2k

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

(1)用双指针遍历,p从头开始移动到k时,q开始移动,p遍历完后q的位置就是倒数第k个节点位置。如果不足k节点额外处理。

(2)p,q=list,count=0;

p=p->next,count++,如果p为空判断 count===k,输入q->data; return 1; else return 0;

(3)

typedef struct LinkNode{
  ElemType data;
  LinkNode *link;
}LinkNode, *LinkList;
int findk(LinkList L , int k){
  LinkNode *p = L->link, *q = L->link;
  int count=0;
  for(;p!=NULL;p=p->link){
    count < k ? count++ : q = q->link;
}
  if (count < k) return 0;
  else{
   cout << q->data;
  return 1;
}
}

 


评分及理由

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

学生描述了双指针遍历的基本思想:p从头开始移动,当p移动到第k个节点时q开始移动,p遍历完后q的位置就是倒数第k个节点。这与标准答案的设计思想一致,但未明确说明初始时p和q指向第一个结点(表头结点的下一个结点),且未提及对k值超过链表长度的处理。扣1分。

得分:4分

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

学生给出了实现步骤,但描述过于简略且存在错误:步骤中"p=p->next,count++"的写法不完整(未体现条件判断),且未说明q指针何时开始移动(标准答案中当count等于k时q才开始移动)。步骤描述缺乏清晰的分步逻辑,且未涵盖全部必要步骤(如p为空时的处理)。扣3分。

得分:2分

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

代码实现基本正确,但存在以下问题: 1. 类型定义中使用了"LinkNode"和"LinkList",但未正确定义LinkList为指针类型(标准答案使用typedef struct LNode *LinkList)。 2. 代码中使用了C++的cout输...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发