《数据结构与数据库实验一集合的运算.doc》由会员分享,可在线阅读,更多相关《数据结构与数据库实验一集合的运算.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据结构与数据库实验仅供参考实验一 集合的表示及运算实验名称: 集合的表示及运算 专 业: 电气工程 姓 名: 学 号: 集合的表示及运算一、 实验要求1程序的功能:实现集合的交、并、判断相等运算。2输入输出的要求:设计的数据结构应有利于表示任意个数元素组成的集合。3测试数据。(1) a, b, c, b, c, d(2) a, b,c, x, y(3) , x, y(4) a, x, b, a, x, b二、 概要设计1采用的数据结构的定义及主要功能模块的功能: 在本实验中,数据的存储采用数组连续存储方式。由于本实验相对简单,功能相对较少,只是针对数组进行交并等基础性操作,所以本实验中只采用
2、了函数模板,这样比结构体、类以及类模板都更加简洁、易懂,也更有利于实现对多种数据类型的数据进行操作。而且,为了满足设计的数据结构应有利于表示任意个数元素组成的集合,在本实验中采用由用户自己输入所需存储空间的最大长度,动态分配所需存储空间。由于含有动态生成的数据成员,必须自定义析构函数以释放动态分配的内存,本实验中的析构函数为(*,T*)。 字符串的比较采用string类、各个函数模板的声明及其功能如下:1、判断集合是否相等的运算:templatevoid deng_array(T*A,T*B,int A_mm,int B_mm);/A、B为需要进行判断是否相等的数组,A_mm、B_mm 分别为
3、数组、的最大存储空间,由用户在输入数组数据时确定并输入,算法根据用户输入的数据动态建立相应的存储空间。以下各形式参量的意义均与此相同。2、集合的交运算:templatevoid jiao_array(T*A,T*B,int A_mm,int B_mm);3、集合的并运算:templatevoid bing_array(T*A,T*B,int A_mm,int B_mm);4、析构函数:templatevoid Delete(T*A,T*B);/释放动态分配的内存5、字符串的交运算template string jiao_string(T & A,T &B);6、字符串的并运算template
4、string jiao_string(T & A,T &B);7、判断字符串是否相等:采用string中的=if(A=B)coutEQUALendl;coutNOT EQUALendl;三、 详细设计1、各模块的流程图:1、判断集合是否相等的运算:数组长度是否相等是否逐个比较数组中的元素是否相等结束,输出NOT EQUAL是结束,输出EQUAL2、集合的交运算:数组中是否有空集结束,输出NULL否 比较两个数组长度以较小的长度建立新数组,作为交集合用A中的每一个元素与B中的元素比较相等则存入C3、集合的并运算:数组A、B是否为空有一个为空,不为空的数组即为并集数组A、B均为空结束,输出NULL
5、去量数组长度的和,建立新数组,用于并集合先把A复制到C中用B中的每一个元素与C中的元素比较不相等则存入C4、析构函数:释放动态分配的内存:deleteA;deleteB;5、字符串的交运算数组A、B是否为空A、B均为空结束,输出NULL从A中取出一个字符在B中寻找它的出现位置在B中,则复制到C中重复上述循环,直到最后一个元素6、字符串的并运算数组A、B是否为空有一个为空,不为空的数组即为并集数组A、B均为空结束,输出NULL先把A复制到C中用B中的每一个元素与C中的元素比较不相等则存入C四、 调试分析1、在本实验中,集合的数据类型可以实现字符型、整型,用户可根据系统提示进行选择。初始界面如下:
6、2、若选择字符型:3、输入数组A、B的存储空间长度A_mm、B_mm,然后分别输入数组数据,最后输出执行结果:4、整型与此类似:测试数据的输出结果:(1) a, b, c, b, c, d(2) a, b,c, x, y(3) , x, y(4) a, x, b, a, x, b(5)字符串的测试数据A=”qwert”B=”ert”源程序:#include#includeusing namespace std;templatevoid deng_array(T*A,T*B,int A_mm,int B_mm)int i;if(A_mm!=B_mm)coutNOT EQUALendl;retur
7、n;for(i=0;iA_mm;i+)if(Ai!=Bi)coutNOT EQUALendl;return;coutEQUALendl;return;templatevoid jiao_array(T*A,T*B,int A_mm,int B_mm)int i,j,k,t,m;T*C;/=NULL;if(A_mm=0|B_mm=0)coutNULLB_mm ? A_mm:B_mm;t=0;C=new Tk;for(i=0;iA_mm;i+)for(j=0;jB_mm;j+)if(Ai=Bj)Ct=Ai;t+;if(t=0)coutNULLendl;return;m=0;while(mt) co
8、utCmt;m+;coutendl;m=0;while(mt) coutCmt;m+;return;templatevoid bing_array(T*A,T*B,int A_mm,int B_mm)int i,j,k,t;T*C;int*D;if(A_mm=0&B_mm=0)coutNULLendl;return;else if(A_mm=0&B_mm!=0)t=B_mm;C=new Tt;for(j=0;jt;j+) Cj=Bj;for(int k=0;kt;k+)coutCk;coutt;coutendl;for(int p=0;pt;p+)coutCpt;coutendl;else i
9、f(A_mm!=0&B_mm=0)t=A_mm;C=new Tt;for(i=0;it;i+) Ci=Ai;for(int h=0;ht;k+)coutCk;coutt;coutendl;for(int p=0;pt;p+)coutCpt;coutendl;else if(A_mm!=0&B_mm!=0)t=A_mm+B_mm;k=A_mm;D=new intB_mm;C=new Tt;for(i=0;iB_mm;i+) Di=0;for(i=0;iA_mm;i+) Ci=Ai;j=0;while(jB_mm)for(i=0;iA_mm;i+)if(Bj=Ci)Dj=1;break;j+;fo
10、r(int q=0;qB_mm;q+)if(Dq=0)Ck=Bq;k+;int n=0;while(nk)coutCn;coutt;n+;coutendl;for(int p=0;pk;p+)coutCpt;coutendl;return;templatevoid Delete(T*A,T*B)delete A;delete B;return;template string bing_string(T & A,T &B)T C=A;int i;int Amm=A.length();int Bmm=B.length();for(i=0;iBmm;i+)string ch=B.substr(i,1
11、);int l=A.find(ch,0);if(l=Amm) C=C+ch;return C;template string jiao_string(T & A,T &B)T C;int i;int k=0;int Amm=A.length();int Bmm=B.length();for(i=0;i=k&lAmm) C=C+ch;return C;int main()int Amm,Bmm;char AB;/ INT,CHAR,STRING;coutChoose The Type of Data. CHAR(c/C) OR INT(i/I) OR STRING (S/s)AB;if(AB=C
12、|AB=c)coutTYPE CHAR 字符型endl;int i=0;int j=0;char *A;char *B;Amm=0;Bmm=0;coutEntertAmmAmm; couttBmmBmm;coutendl; A=new charAmm;B=new charBmm;coutEntert;while(iAmm)coutAit;i+;coutendl;i=0;while(iAi;coutt;i+; coutendl;coutEntert;while(jBmm)coutBjt;j+;coutendl;j=0;while(jBj;coutt;j+; coutendl;coutThe re
13、sult of jiaoendl;jiao_array(A,B,Amm,Bmm);coutendl; coutThe result of dengendl; deng_array(A,B,Amm,Bmm);coutThe result of bingendl; bing_array(A,B,Amm,Bmm);Delete(A,B);return 0;if(AB=S|AB=s)coutTYPE string 字符串endl;int i=0;int j=0;string A;string B;Amm=0;Bmm=0;char ch=;coutEnter string A and end with
14、endl;getline(cin,A,ch); coutendl;coutEnter string B and end with endl;getline(cin,B,ch);coutendl; coutendl;coutThe result of jiaoendl;string s;s=jiao_string(A,B);coutsendl;coutendl; coutThe result of dengendl;if(A=B)coutEQUALendl;coutNOT EQUALendl; /deng_array(A,B,Amm,Bmm);coutThe result of bingendl
15、;string c; c=bing_string(A,B); coutcendl; /bing_array(A,B,Amm,Bmm);/Delete(A,B);return 0;/ if(AB=I|AB=i)coutTYPE int 整型endl;int i=0;int j=0;int *A;int *B;Amm=0;Bmm=0;coutEntertAmmAmm; couttBmmBmm;coutendl; A=new intAmm;B=new intBmm;coutEntert;while(iAmm)coutAit;i+;coutendl;i=0;while(iAmm)coutAi;/cou
16、tendl;i+; coutendl;coutEntert;while(jBmm)coutBjt;j+;coutendl;j=0;while(jBmm)coutBj;/coutendl;j+;coutendl; coutendl;coutThe result of jiaoendl;jiao_array(A,B,Amm,Bmm);coutendl; coutThe result of dengendl; deng_array(A,B,Amm,Bmm);coutThe result of bingendl; bing_array(A,B,Amm,Bmm);Delete(A,B);return 0;/Array.deng_array(A3,B3,Amm,Bmm);return 0;