阅读以下说明和 C 函数,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说

最全题库2022-08-02  33

问题 阅读以下说明和 C 函数,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】函数 Combine(LinkList La,LinkList Lb)的功能是:将元素呈递减排列的两个含头结 点单链表合并为元素值呈递增(或非递减)方式排列的单链表,并返回合并所得单链表 的头指针。例如,元素递减排列的单链表 La 和 Lb 如图 4-1 所示,合并所得的单链表如图 4-2 所示。设链表结点类型定义如下: typedef  struct Node{               int data;               struct Node  *next;}Node ,*LinkList; 【C 函数】LinkList  Combine(LinkList   La ,LinkList   Lb){    //La 和 Lb 为含头结点且元素呈递减排列的单链表的头指针     //函数返回值是将 La 和 Lb 合并所得单链表的头指针     //且合并所得链表的元素值呈递增(或非递减)方式排列     (1)      Lc ,tp ,pa ,pb;;  //Lc 为结果链表的头指针 ,其他为临时指针      if  (!La)  return NULL;     pa  =  La->next;                  //pa 指向 La 链表的第一个元素结点      if  (!Lb)  return NULL;     pb  =  Lb->next;                               //pb 指向 Lb 链表的第一个元素结点      Lc  =  La;                                          //取 La  链表的头结点为合并所得链表的头结点     Lc->next  =  NULL;      while (    (2)    ){ //pa 和 pb 所指结点均存在(即两个链表都没有到达表尾)          //令tp指向 pa 和 pb 所指结点中的较大者          if (pa->data > pb->data) {          tp = pa;       pa = pa->next;     }     else{           tp = pb;     pb = pb->next;      }        (3)    =  Lc->next;       //tp 所指结点插入 Lc 链表的头结点之后      Lc->next =  (4)     ;  }  tp =  (pa)? pa : pb;   //设置 tp 为剩余结点所形成链表的头指针   //将剩余的结点合并入结果链表中, pa 作为临时指针使用  while (tp) {     pa = tp->next;     tp->next = Lc->next;     Lc->next = tp;             (5)    ;   }  return Lc;}

选项

答案

解析 (1) LinkList(2) pa&&pb(3) tp->next (4) tp(5) tp=pa本题考查数据结构应用及 C 语言实现。链表运算是 C 程序设计题中常见的考点,需熟练掌握。考生需认真阅读题目中的说明,以便理解问题并确定代码的运算逻辑,在阅读代码时,还需注意各变量的作用。根据注释,空(1)所在的代码定义指向链表中结点的指针变量,结合链表结点类 型的定义,应填入"LinkList"。由于 pa 指向La链表的元素结点、pb 指向 Lb 链表的元素结点,空 (2) 所在的while语句中,是将 pa 指向结点的数据与 pb 所指向结点的数据进行比较,因此空 (2) 处应填 入 "pa &&pb",以便运算“pa->data > pb->data”中的 pa 和 pb 为非空指针 。从空(3)所在语句的注释可知,需将 tp 所指结点插入 Lc 链表的头结点之后,空(3)处应填入"tp->next",空(4)处应填入 “tp”如下图所示。空 (5) 所在的 while 语句处理还有剩余结点的链表, pa 是保存指针的临时变量,循环中的下面 4 条语句执行后的链表状态如下图所示。空 (5) 处应填入 "tp= pa",以继续上述的重复处理过程。
转载请注明原文地址:https://tihaiku.com/congyezige/2427178.html

最新回复(0)