要求:用自然语言说明算法设计思路,给出算法用的数据结构定义,并做出必要的注释。说明算法的复杂度和时间复杂度。用C语言写出对应的算法函数,并加上必要的注释。
1、试编写在链式存储结构实现求两个集合之差函数difference(A,B),令C=A-B,取当e是A中的一个元素,但不是B的元素时,e是C中的一个元素。
算法设计思路:
求两个集合的差集意味着找出在集合A中但不在集合B中的元素,并将这些元素构成一个新的集合C。在链式存储结构中,我们可以通过遍历集合A的链表,检查每个元素是否同时存在于集合B的链表中。如果存在于A但不存在于B,就将该元素加入集合C。
数据结构定义:
首先,我们需要定义一个表示集合元素的结构体。每个结点包含一个数据域(代表集合元素)和一个指针域(用于连接下一个结点)。在这个问题中,我们需要两个链表,分别代表集合A和集合B。定义如下:
课本43也算法:
void Difference(Linklist LA,Linklist LB)
{ /*此算法求两个集合的差集*/
Linklist pre,p,r;
pre=LA; p=LA->next;/*p指向LA表中的某一结点,而pre始终指向p的前驱*/
while(p!=NULL)
{ q=LB->next