当前位置: 首页icon 51CTO软考 > 软考资讯 >考试科目 >2020年11月程序员模拟题下午(一)之三

2020年11月程序员模拟题下午(一)之三

作者:mb64e70626def822023-11-29 01:00:15
备考咨询 刷题指导
添加专属学姐
下载资料 2024上半年软考备考资料+考试大纲
下载按钮 下载
引号

摘要:对于【程序员】软考考试而言,试题无疑是最重要的学习资料之一。在软考备考过程中,吃透试题、掌握试题所考知识点、熟悉试题的出题思路,对我们提升分数的效果是最明显的,通过对试题的反复练习,还可以查漏补缺。今天,给大家带来【2020年11月程序员模拟题下午(一)】部分试题的详解,一起来看看吧~1、阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。&nbsp

引号
摘要:对于【程序员】软考考试而言,试题无疑是最重要的学习资料之一。在软考备考过程中,吃透试题、掌握试题所考知识点、熟悉试题的出题思路,对我们提升分数的效果是最明显的,通过对试题的反复练习,还可以查漏补缺。今天,给大家带来【2020年11月程序员模拟题下午(一)】部分试题的详解,一起来看看吧~



1、阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 函数 GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。 函数DelListElem(LinkList L,int i,ElemType *e) 的功能是删除含头结点单链表的第 i个元素结点,若成功则返回 SUCCESS ,并由参数e 带回被删除元素的值,否则返回ERROR 。 例如,某含头结点单链表 L 如图 (a) 所示,删除第 3 个元素结点后的单链表如图 4-1 (b) 所示。#define SUCCESS 0  #define ERROR -1  typedef int Status;  typedef int ElemType;  链表的结点类型定义如下:  typedef struct Node{  ElemType data;  struct Node *next;  }Node,*LinkList;  [C代码]  LinkList GetListElemPtr(LinkList L,int i)  { /*L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点;  若找到,则返回该元素结点的指针,否则返回NULL  */  LinkList p;  int k; /*用于元素结点计数*/  if(i<1 || !L || !L->next) return NULL;  k=1; p=L->next; /*令p指向第1个元素所在结点*/  while(p && _(1_){ /*查找第i个元素所在结点*/ (2) ; ++k;  }  return p;  }  Status DelListElem(LinkList L,int i,ElemType *e)  { /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/  LinkList p,q;  /*令P指向第i个元素的前驱结点*/  if(i==1)  (3);  else  p=GetListElemPtr(L,i-1);  if(!P || !p->next) return ERROR; /*不存在第i个元素*/  q=(4); /*令q指向待删除的结点*/  p->next=q->next; //从链表中删除结点*/  (5); /*通过参数e带回被删除结点的数据*/  free(q);  return SUCCESS;  }
答案:

(1)k<i  

(2)p=p->next 

(3) p=L  

(4)p->next  

(5)*e=q->data


答题解析:

本问题的图和代码中的注释可提供完成操作的主要信息,在充分理解链表概念的基础上填充空缺的代码。  函数GetListElemPtr(LinkList L,int i)的功能是在L为头指针的链表中查找第i个元素,若找到,则返回指向该结点的指针,否则返回空指针。描述查找过程的代码如下,其中k用于对元素结点进行计数。  k=1; p=L->next; /*令p指向第1个元素所在结点*/  while(p && ______) { /*查找第i个元素所在结点*/  ______; ++k;  }  

上述代码执行时,k的初始值为1,同时p指向第一个元素结点。当找到第i个元素结点时,k应等于i,尚未到达第i个结点时,k小于i。因此,空(1)处应填入“k<i”或其等价形式,使得没有达到第i个结点时继续查找。空(2)处应填入“p=p->next”,从而使得指针p沿着链表中的结点向第i个结点移动。  函数DelListElem(LinkList L,int i, ElemType *e)的功能是删除含头结点单链表的第i个元素结点,若成功则返回SUCCESS,并由参数e带回被删除元素的值,否则返回ERROR。  

根据注释,空(3)所在语句需要指向第一个结点之前的结点(即头结点),显然此处应填入“p=L”。  空(4)所在语句令q指向待删除的结点,由于之前已经令p指向待删除结点的前驱结点,显然,此空应填入“p->next”。  

空(5)所在语句通过参数e带回被删除结点的数据,由于此时只能通过指针q找到被删除的结点,所以应填入“*e=q->data”。



查看完整试题>>>


代理合作学习群