阅读以下说明和C函数,填补代码中的空缺。 【说明】 函数Combine(LinkList La,LinkList Lb)的功能是:将元素呈递减排列的两个含头结点单链表合并为元素值呈递增(或非递减)方式排列的单链表,并返回合并所得单链表的头指针。例如

admin2016-09-08  62

问题 阅读以下说明和C函数,填补代码中的空缺。
【说明】
    函数Combine(LinkList La,LinkList Lb)的功能是:将元素呈递减排列的两个含头结点单链表合并为元素值呈递增(或非递减)方式排列的单链表,并返回合并所得单链表的头指针。例如,元素递减排列的单链表La和Lb如图4一1所示,合并所得的单链表如图4一2所示。

    设链表结点类型定义如下:
    typedef struct Node{
    int data;
    struct Node *nextf
    }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=NULLf
    while(
(2)){  //pa和pb所指结点均存在(即两个链表都没有到达表尾)
//令tp指向pa和pb所指结点中的较大者
    if(pa一>data>pb一>data){
    tp=paf    pa = pa一>next;
    }
    else f
    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条语句执行后的链表状态如下图所示。
    pa=tp一>next;    //①
    tp一>next=Lc一>next;    //②
    Lc一>next=tp;    //③
(5);    //④

    空(5)处应填入“tp=pa”,以继续上述的重复处理过程。
转载请注明原文地址:https://kaotiyun.com/show/89jZ777K
0

相关试题推荐
最新回复(0)