问答题
试题六
阅读下列函数说明和C 函数,将应填入 (n) 处的字句写在答题纸的对应栏内。
[函数6 说明]
函数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;
[函数6]
int DelA_InsB(LinkedList La,LinkedList 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<1en
(2)q=q->next
(3)pres = Lb
(4)prep->next
(5)s 或 pres->next
【答案解析】