}
//求并集
LinkList Union(LinkList A,LinkList B,LinkList C) {
LinkList pa, pb, pc,tail; pa = A->next; pb = B->next; tail = C;
while(pa && pb) {
if((pa->data) <= (pb->data)) //若A中的元素小于B中的元素,把A的元素存到B中 {
pc = (LinkList)malloc(sizeof(ListNode)); pc->data = pa->data;
pc->next=tail->next; //链表尾插法 tail->next = pc; tail = pc; pc = pc->next; pa = pa->next; }
else //若A中的元素大于B中的元素,把B的元素存到A中 {
pc = (LinkList)malloc(sizeof(ListNode)); pc->data = pb->data; pc->next=tail->next;
tail->next = pc; //链表尾插法 tail = pc; pc = pc->next; pb = pb->next; } }
if(pa == NULL) //如果A已经为空表,把B中剩余的元素全部存放到C中 {
pc = pb;
tail->next = pc;
31
tail = pc; }
else //如果B已经为空表,把A中剩余的元素全部存放到C中 {
pc = pa;
tail->next = pc; tail = pc; }
return(C); //返回C的头结点 }
//求交集
LinkList Intersection(LinkList A,LinkList B,LinkList L) {
ListNode *pa, *pb, *pc,*tail; tail = L; pa = A->next; pb = B->next; while (pa && pb) {
if (pa->data < pb->data) //如果A中的元素小于B中的元素,A继续往后与B中当前元素比较 {
pa = pa->next;
}
else if (pa->data > pb->data)//如果A中的元素大于B中的元素,B继续往后与A中当前元素比较 {
pb = pb->next; }
else //如果A中元素与B中元素相同,把A中的元素尾插入到L中
{
pc = (LinkList)malloc(sizeof(ListNode)); pc->data = pa->data;
pc->next=tail->next; //链表尾插入法 tail->next = pc;
32
tail = pc; pc = pc->next; pa = pa->next; pb = pb->next; } }
return L; //返回L链表头指针 }
//求差集
LinkList Difference(LinkList A,LinkList B,LinkList C) {
LinkList pa, pb, pc; pa = A->next; pb = B->next; pc = A;
while(pa && pb) {
if (pa->data != pb->data) //如果A中元素与B中元素不相等,把A中的元素插入到A中
{
pc->next = pa; pc = pa;
pa = pa->next; }
else //如果A中元素与B中元素相等,A,B都继续往后进行元素值比较
{
pa = pa->next; pb = pb->next; } }
return A; //返回A的头指针 }
//求笛卡尔积
int Dikaer(LinkList A,LinkList B) {
FILE *fp;
fp = fopen(\打开文件准备写入
33
if (fp == NULL) {
printf(\ return 0; }
LinkList p,q; int k = 0; p=A->next; q=B->next;
fprintf(fp,\笛卡尔积为:\\n\
while(p) //集合A不为空时 {
while(q) //集合B不为空时 {
printf(\打印出笛卡尔积 k++;
if (k % 3 == 0) //控制每行输出的数目为3个 printf(\
fprintf(fp,(k % 3) == 0?\ //打印笛卡尔积,写入并输出到文件中 q=q->next; }
p = p->next; //指向集合A的下一个元素 q = B->next; //返回到集合B第一个元素 }
printf(\
fclose(fp); //关闭文件
system(\自动弹出生成的文件(笛卡尔积的结果) return 1; }
//打印链表
void PrintSet(LinkList L) {
FILE *file;
file = fopen(\ if ( file == NULL ) {
printf(\ }
LinkList head; ListNode *p;
34
int x, k = 0; head=L;
p=head->next;
printf(\链表为:\\n\
if (!p) //集合中没有元素 {
printf(\链表为空!\\n\ }
while(p) //集合中有元素 {
x=p->data; k++;
printf(\
fprintf(file,(k % 5 == 0)?\写入文件并输出集合 p=p->next; }
printf(\ fclose(file);
system(\自动弹出生成的文件结果
}
35
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库集合的交,并,差操作(5)在线全文阅读。
相关推荐: