●试题三 阅读下列函数说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 函数Del

15 查阅

●试题三

阅读下列函数说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

函数DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线性表A中关键码为key1的结点开始的len个结点,按原顺序移至线性表B中关键码为key2的结点之前,若移动成功,则返回0;否则返回-1。线性表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为

typedef struct node {

int key;

struct node *next;

}*LinkedList;

【函数】

int DelA_InsB(LinkedList La,LinkdeList Lb,int key1,int key2,int len)

{LinkedList p,q,s,prep,pres;

int k;

if(!La->next||!Lb->next||len<=0)return-1;

p=La->next;prep=La;

while(p & & p- >key != key1){/*查找表A中键值为key1的结点*/

prep=p;p=p->next;

}

if(!p)return -1;/*表A中不存在键值为key1的结点*/

q=p;k=1;

while(q && (1) ){/*在表A中找出待删除的len个结点*/

(2) ;k++;

}

if(!q)return -1;/*表A中不存在要被删除的len个结点*/

s=Lb->next; (3) ;

while(s && s->key !=key2){/*查找表B中键值为key2的结点*/

pres=s;s=s->next;

}

if(!s)return -1;/*表B中不存在键值为key2的结点*/

(4) =q->next;/*将表A中的len个结点删除*/

q->next= (5) ;

pres->next=p;/*将len个结点移至表B*/

return 0;

}

参考答案:

●试题三【答案】(1)k<len(2)q=q->next 或 q=(*q).next(3)pres=Lb(4)prep->next或(*prep).next(5)s 或 pres->next 或(*pres).next【解析】(1)此处while循环应当循环至k等于len结束,所以应填入k<1en。(2)此处语句表示链表前进一个结点,应填入q=q->next或 q=(*q).next。(3)此处语句为指针pres赋初值,使他指向s的上一结点。(4)修改指针prep,使p

软考初级