填空题
阅读以下函数说明和C语言函数,回答问题。
[说明]
函数Node *difference(A,B)用于求两个集合之差C=A-B,即当且仅当e是A中的一个元素,但不是B中的元素时,e是C中的元素。集合用有序链表实现,用一个空链表表示一个空集合,表示非空集合的链表根据元素之间按递增排列。执行C=A-B之后,表示集合A和B的链表不变,若结果集合C非空,则表示其链表根据元素之值按递增排列。函数append()用于在链表中添加节点。
[C函数]
typedef struct node
int element;
struct node *link;
Node;
Node *A,*B,*C;
Node *append(last,e)
Node *last;
int e;
last->link=(Node *)malloc(sizeof(Node));
last->link->element=e;
return(last->link);
Node *difference(A,B)
Node *A,*B;
Node *c,*last;
C=last=(Node *)malloc(sizeof(Node));
while( (1) )
if(A->element<B->element)
last=append(last,A->element);
A=A->link:
else if( (2) )
A:A->link;
B:B->link;
elSe
(3) ;
while( (4) )
last=append(last,A->element);
A=A->link:
(5) ;
last=c;
c=c->link;
free(last);
return(c);
【正确答案】
1、{{*HTML*}}(1) B->link (2) A->element==B->element (3) B=B->link
(4) A>link!=NULL (5) last->link=NULL
【答案解析】[解析] 本题用链表表示集合,通过比较链表的元素值判断集合的元素之间的关系。第一个while循环的条件是链表B指针不指向空,即空(1)应填“B->link”。由于A,B两集合都是按递增排列的,则如果A中的元素小于B中的元素,A中元素直接放入集合C中,集合A指向其下一个元素;如果A中的元素等于B中的元素,集合A,B分别指向下一个元素,即空(21填“A->element==B->element”;如果A中的元素大于B中的元素,集合B指向其下一个元素,即空(3)填“B=B->link”。第二个循环的条件是链表A指针不指向空时,将A中元素直接加入到C中,即空(4)填“A->link!=NULL”。将链表C最后节点指针指向空,即空(51填“last->link=NULL”。