文档介绍:数据结构实验-集合的并交差运算实验报告实验报告实验课程:数据结构实验项目:实验一集合的并交差运算专业:计算机科学与技术班级:姓名:学号:指导教师:目录问题定义及需求分析(1)实验目的(2)实验任务(3)需求分析二、概要设计:(1)抽象数据类型定义(2)主程序流程(3)模块关系详细设计(1)数据类型及存储结构(2)模块设计调试分析(1)调试分析(2)算法时空分析(3)经验体会使用说明(1)程序使用说明测试结果(1)运行测试结果截图附录(1)源代码问题定义及需求分析(1)实验目的设计一个能演示集合的并、交、差运算程序。(2)实验任务1)采用顺序表或链表等数据结构。2)集合的元素限定为数字和小写英文字母。(3)需求分析:输入形式为:外部输入字符串;输入值限定范围为:数字和小写英文字母;输出形式为:字符集;程序功能:计算两个集合的交、并、差以及重新输入集合功能;概要设计:(1)抽象数据类型定义:线性表主程序流程:调用主菜单函数初始化两个线性表作为集合给两个集合输入数据输出集合数据元素信息另初始化两个线性表创建选择功能菜单界面通过不同选项调用不同功能函数在每个功能函数里面加结束选择功能,实现循环调用功能菜单计算完毕退出程序;模块关系:主菜单差运算并运算交运算新建集合结束/返回结束三、详细设计抽象数据类型定义:typedefstruct{ElemType*elem;intlength;intlistsize;}SqList;存储结构:顺序表;模块1-在顺序表的逻辑为i的位置插入新元素e的函数;算法如下:/**在顺序表的逻辑为i的位置插入新元素e的函数**/StatusListInsert_Sq(SqList&L,inti,ElemTypee){ElemType*newbase,*p,*q;if(i<1||i>+1)return0;//i的合法值为(1<=i<=(L)+1)if(>=){//当前储存空间已满,增加分配newbase=(ElemType*)realloc(,(+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(-1);//=newbase;//+=LISTINCREMENT;//增加储存容量}q=&([i-1]);//q为插入位置for(p=&([-1]);p>=q;--p)(p+1)=p;//插入位置及之后的元素往右移q=e;//插入e++;//表长加1return1;}pare()的元素位序,若找到,则返回其在L中的位序,否则返回0算法如下:/**pare()的元素位序,若找到,则返回其在L中的位序,否则返回0**/intLocateElem_Sq(SqListL,ElemTypee,Status(*compare)(ElemType,ElemType)){ElemType*p;inti;i=1;//i的初值为第1个元素的位序p=;//p的初值为第1个元素的储存位置while(i<=&&!(*compare)(*p++,e))++i;//从表L中的第一个元素开始与e比较,直到找到L中与e相等的元素时返回该元素的位置if(i<=)returni;//若i的大小小于表长,则满足条件返回ielsereturn0;//否则,i值不满足条件,返回0}模块三集合交运算算法如下:/**求集合的交集的函数**/voidMix_Sq(SqListLa,SqListLb,SqList&Lc){inti;ElemTypeelem;=0;//将表Lc的长度设为0for(i=1;i<=;i++){//依次查看表La的所有元素elem=[i-1];//将表La中i位置的元素赋值给elemif(LocateElem_Sq(Lb,elem,Equal))//在表Lb中查找是否有与elem相等的元素ListInsert_Sq(Lc,+1,elem);//将表La与Lb中共同的元素放在Lc中}}模块四集合并运算算法如下:/**求集合的并集的函数**/