集合的交,并,差操作(5)

2020-07-27 10:55

}

//求并集

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


集合的交,并,差操作(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:IFI第七版紧固件标准目录 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: