数据结构
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下
——老子
1
每日一练
1.下面是一个求两个集合 A 和 B 之差 C=A-B 的程序,即当且仅当 e 是 A 的一个元素,但不是 B 中的一个元素时,e 才是 C 中的一个元素。集合用有序链表实现,初始时,A,B 集合中的元素按递增排列,C 为空;操作完成后 A,B 保持不变,C 中元素按递增排列。下面的函数 append(last,e)是把值为 e 的新结点链接在由指针 last 指向的结点的后面,并返回新结点的地址;函数 difference(A,B)实现集合运算 A-B,并返回表示结果集合 C 的链表的首结点的地址。在执行 A-B 运算之前,用于表示结果集合的链表首先增加一个附加的表头结点,以便新结点的添加,当 A-B 运算执行完毕,再删除并释放表示结果集合的链表的表头结
点。
程序(b)
typedef struct node{ int element; struct node *link;
}NODE;
NODE *A,*B,*C;
NODE *append (NODE *last,int e)
{ last->link=(NODE*) malloc (sizeof(NODE));
last->link->element=e;
return(last->link);
}
NODE *difference(NODE *A,NODE *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);
}
/*call form:C=difference(A,B);*/
正确答案
||后面的是注释
1.
程序(b) C部分
(1)(A!=null && B!=null) ∥两均未空时循环
(2)A->element==B->element ∥两表中相等元素不作结果元素
(3)B=B->link ∥向后移动B表指针
(4)A!=null ∥将A 表剩余部分放入结果表中
(5)last->link=null ∥置链表尾
如果您觉得本篇文章对您有作用,请转发给更多的人,点一下好看就是对小编的最大支持!
-end-