C语言实现集合地交,并,差_第1页
C语言实现集合地交,并,差_第2页
C语言实现集合地交,并,差_第3页
C语言实现集合地交,并,差_第4页
C语言实现集合地交,并,差_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实用文案【问题描述】编制一个能演示执行集合的并、交和差运算的程序【基本要求】(1)集合的元素限定为小写字母字符 ['a'......'z']2)演示程序以用户和计算机对话的方式执行【测试数据】【实现提示】以有序链表表示集合【代码过程】1。先定义 集合的数据类型 notes.h//notes.htypedefstructLNode...{ElemType data;LNode *next;}*Link,*Position;typedefstruct...{Link head,tail;int len;标准文档实用文案}LinkSet;//~2。以后要用的一些常量放在 constValues.h#include<stdio.h>#include<malloc.h>#include<stdlib.h>函数结果状态代码#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2#defineElemType int //存放数据的类型typedefint Status; //函数的返回值//~3。集合实现函数 setsFun.h/**//****************** 函数定义 *********************/StatusInitSets(LinkSet&ls)...{标准文档实用文案初始化集合ls.head=(Link)malloc(sizeof(Link));ls.tail=(Link)malloc(sizeof(Link));if(!ls.head||!ls.tail)exit(OVERFLOW); //如果分配失败ls.head->next=ls.tail->next= NULL; //头、尾指针为空ls.len=0; //长度为0returnOK;}StatusCreateNode(Link&link,ElemTypee)...{创建一节点,内容为elink=(Link)malloc(sizeof(Link));if(!link) exit(OVERFLOW);link->data=e; //值设定link->next=NULL; //指向空returnOK;}PositionPriorInsertNode(LinkSet&ls,Link&link)...{找出节点link要插入到ls的前一个节点if(!ls.head->next)returnls.head;标准文档实用文案Linkh1=ls.head->next,h2=h1->next; //h1:前一节点, h2:前一节点的后一节点if(link->data<h1->data)returnls.head; //如果比第一个节点小, 返回头指针while(h1&&h2)...{if(h1->data < (link->data) && h2->data > (link->data) ) //如果>h1&&<h2 ,说明找到插入的地方了break;if(h1->data==(link->data)||h2->data==(link->data))returnNULL; //如果重复,返回 NULLelse //否则,顺次往后挪一个节点h1=h2,h2=h1->next;}returnh1;}StatusAppend(LinkSet&ls,Link&link)...{//向集合末尾追加节点if(ls.head->next==NULL) ls.head->next=link;elsels.tail->next->next=link;ls.tail->next=link;ls.len++;标准文档实用文案returnOK;}StatusInsertNode(LinkSet&ls,Link&link)...{向集合中插入节点Positionp=PriorInsertNode(ls,link);if(!p) returnERROR; //如果集合中已有相应元素link->next=p->next;if(!p->next) ls.tail->next=link; //如果前一节点为尾节点,修改 tailp->next=link;ls.len++;returnOK;}PositionPriorNode(LinkSet&ls,Link&link)...{返回集合中该节点的前一节点,不存在返回NULLintj=0;Linkpre,h=ls.head;while(h->next&&j<=ls.len&&h!=link)...{pre=h;h=h->next;j++;}if(j==0)returnNULL;标准文档实用文案returnpre;}StatusPrintSets(LinkSet&ls)...{打印集合Linkh=ls.head->next;printf("[");while(h)...{printf("%c",h->data);h=h->next;}printf("]");returnOK;}PositionGetHead(LinkSet&ls)...{获得集合的头节点returnls.head;}标准文档实用文案PositionNextPos(Link&link)...{获得当前节点的下一个节点returnlink?link->next:link;}StatusEmpty(LinkSet&ls)...{空为真returnls.head->next==NULL;}ElemTypeGetCurElem(Link&link)...{获得当前节点的数据returnlink->data;}intCompare(Link&la,Link&lb)...{判断两个节点的大小returnla->data-lb->data;}intCompare(ElemTypee1,ElemTypee2)...{比较两个数字的大小标准文档实用文案returne1-e2;}StatusDelFirst(LinkSet&ls,Link&q)...{已知h为线性链表的头节点,删除表中的第一个节点,并以q返回Linkh=ls.head;if(!h->next)returnERROR;q=h->next;h->next=h->next->next;q->next=NULL;ls.len--;returnOK;}StatusFreeNode(Link&l)...{// 释放节点,有问题free(l);returnOK;}StatusUnionSets(LinkSetlsa,LinkSet&lsb,LinkSet&lsc)...{已知集合ls1,ls2的元素按值非递减排列将集合ls1,ls2的并集到ls3标准文档实用文案if(!InitSets(lsc))returnERROR;Linknode;Linkha=lsa.head,hb=lsb.head; //找到两节点的头指针Linkpa=NextPos(ha),pb=NextPos(hb);while(!Empty(lsa)&&!Empty(lsb))...{intresult=Compare(pa,pb); //比较两节点大小if( result<0)...{DelFirst(lsa,node);Append(lsc,node);pa=NextPos(ha); //向lsc插入lsa的相关节点}else if(result>0)...{ //向lsc插入lsb的相关节点DelFirst(lsb,node);Append(lsc,node);pb=NextPos(hb);}else...{DelFirst(lsb,node);pb=NextPos(hb);// 如果两 节点相同,删除lsb中重复的节点,即以 lsa为标准}}while(!Empty(lsa))...{DelFirst(lsa,node);Append(lsc,node);}while(!Empty(lsb))...{DelFirst(lsb,node);Append(lsc,node);标准文档实用文案}returnOK;}StatusIntersectionSets(LinkSet&lsa,LinkSet&lsb,LinkSet&lsc)...{已知集合ls1,ls2的元素按值非递减排列将集合ls1,ls2的交集到ls3if(!InitSets(lsc))returnERROR;Linknode;Linkha=lsa.head,hb=lsb.head;Linkpa=NextPos(ha),pb=NextPos(hb);while(!Empty(lsa)&&!Empty(lsb))...{intresult=Compare(pa,pb);if( result<0)...{DelFirst(lsa,node);pa=NextPos(ha);}elseif(result>0)...{DelFirst(lsb,node);pb=NextPos(hb);}else...{DelFirst(lsb,node);Append(lsc,node);pb=NextPos(hb);DelFirst(lsa,node);pa=NextPos(ha);标准文档实用文案}}while(!Empty(lsa))...{DelFirst(lsa,node);Append(lsc,node);}returnOK;}StatusDifferenceSets(LinkSet&lsa,LinkSet&lsb,LinkSet&lsc)...{已知集合ls1,ls2的元素按值非递减排列//ls3=ls1-ls2if(!InitSets(lsc))returnERROR;Linknode;Linkha=lsa.head,hb=lsb.head;Linkpa=NextPos(ha),pb=NextPos(hb);//,pb2=NextPos(pb1);while(!Empty(lsa)&&!Empty(lsb))...{intresult=Compare(pa,pb);if( result<0)...{DelFirst(lsa,node);Append(lsc,node);pa=NextPos(ha);}elseif(result>0)...{DelFirst(lsb,node);pb=NextPos(hb);}else...{标准文档实用文案DelFirst(lsa,node);pa=NextPos(ha);DelFirst(lsb,node);pb=NextPos(hb);}}returnOK;}StatusCopySets(LinkSetlsa,LinkSetlsb)...{将集合lsa拷贝到lsb中InitSets(lsb);Linkla=lsa.head->next,lb=lsb.head->next;while(la)...{Linknode;CreateNode(node,la->data);lb=node;lsb.len++;la=la->next;lb=lb->next;}lsb.tail=lb;returnOK;标准文档实用文案}//~ 4。测试 test.cpp#include"constValues.h" //常量头 文件#include"notes.h" //节点定义 头文件#include"setsFun.h" //集合操作函数 头文件/**//**************** 测试 ***********************************/voidInitialization()...{printf("****************************************************************************" );printf("*MakeSet1-1 MakeSet1-2 Union-u Intersection-i Difference-dQuit-q*" );printf("****************************************************************************);}voidmain()...{LinkSetset1,set2,set3,seta,setb;标准文档实用文案InitSets(set1),InitSets(set2); //初始化集合while(1)...{Initialization();printf(" 集合Set1:");PrintSets(set1); //打印集合 set1printf(" 集合Set2:");PrintSets(set2); //打印集合 set1printf(" 请键入操作代码 :");fflush(stdin); //清空缓冲区charoper=getchar();charsetsContent[200];switch(oper)...{case'1': //集合set1 赋值printf(" 请输入集合 Set1的内容:");fflush(stdin);gets(setsContent);InitSets(set1);SetSets(set1,setsContent);break;case'2': //集合set1 赋值printf(" 请输入集合 Set1的内容:");标准文档实用文案fflush(stdin);gets(setsContent);InitSets(set2);SetSets(set2,setsContent);break;case'u':case'U': //求并InitSe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论