数据结构 用c语言写的 集合的并、交和差运算的程序
发布时间:2025-05-14 03:38:29 发布人:远客网络
一、数据结构 用c语言写的 集合的并、交和差运算的程序
1、以下程序由标准C实现,并经严格测试。程序通过单链表存储集合
2、void readdata(pointer*head){//读集合
3、 printf("input data('0' for end):");
4、 if((tmp<'a')||(tmp>'z'))
5、 printf("输入错误!必须为小写字母!\n");
6、 p=(pointer*)malloc(sizeof(struct pointer));
7、void disp(pointer*head){//显示集合数据
8、void bing(pointer*head1,pointer*head2, pointer*head3){//计算集合1与集合2的并
9、 p3=(pointer*)malloc(sizeof(struct pointer));
10、 while((p1!=NULL)&&(p1->dat!=p2->dat))
11、 p3=(pointer*)malloc(sizeof(struct pointer));
12、void jiao(pointer*head1,pointer*head2, pointer*head3){//计算集合1与集合2的交
13、 while((p2!=NULL)&&(p2->dat!=p1->dat))
14、 if((p2!=NULL)&&(p2->dat=p1->dat))
15、 p3=(pointer*)malloc(sizeof(struct pointer));
16、void cha(pointer*head1,pointer*head2, pointer*head3){//计算集合1与集合2的差
17、 while((p2!=NULL)&&(p2->dat!=p1->dat))
18、 p3=(pointer*)malloc(sizeof(struct pointer));
19、 head1=(pointer*)malloc(sizeof(struct pointer));
20、 head2=(pointer*)malloc(sizeof(struct pointer));
21、 head3=(pointer*)malloc(sizeof(struct pointer));
22、 printf("集合1与集合2的并为:\n");
23、 printf("集合1与集合2的交为:\n");
24、 printf("集合1与集合2的差为:\n");
25、测试用例为(0表示集合输入结束):
二、用c语言求两个集合的交集,并集,差集
1、#defineARR_LEN255/*数组长度上限*/
2、#defineelemTypechar/*集合元素数据类型*/
3、/*A与B的交集(A∩B):既属于A又属于B的元素构成的集合*/
4、intsetIntersection(setA,setB,set*dest){
5、 for(i=0;i<A.length;i++){/*外循环遍历A*/
6、 for(j=0;j<B.length;j++){/*内循环遍历B*/
7、 if(A.data[i]==B.data[j]){/*既属于A又属于B的元素,存入dest*/
8、/*A与B的并集(A∪B):A与B所有元素构成的集合*/
9、intsetUnion(setA,setB,set*dest){
10、 for(i=0;i<A.length;i++){/*外循环遍历A*/
11、 for(j=0;j<B.length;j++){/*内循环遍历B*/
12、 if(A.data[i]==B.data[j])/*既属于A又属于B的元素,跳过*/
13、 if(j==B.length){/*属于A但不属于B的元素,存入dest*/
14、 for(j=0;j<B.length;j++){/*B的所有元素,存入dest*/
15、/*B在A中的相对补集(A\B):属于A但不属于B的元素构成的集合*/
16、intsetComplement(setA,setB,set*dest){
17、 for(i=0;i<A.length;i++){/*外循环遍历A*/
18、 for(j=0;j<B.length;j++){/*内循环遍历B*/
19、 if(A.data[i]==B.data[j])/*既属于A又属于B的元素,跳过*/
20、 if(j==B.length){/*属于A但不属于B的元素,存入dest*/
21、 setAIB,AUB,ACB;/*交集、并集、补集*/
22、 initSet(&A);initSet(&B);
23、 initSet(&AIB);initSet(&AUB);initSet(&ACB);
24、 setIntersection(A,B,&AIB);
三、c语言数组的定义
C语言支持一维数组和多维数组。如果一个数组的所有元素都不是数组,那么该数组称为一维数组。
在C语言中使用数组必须先进行定义,一维数组的定义方式为:类型说明符;数组名;[常量表达式]。
其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符,方括号中的常量表达式表示数据元素的个数,也称为数组的长度。例如:
int a[10];/*说明整型数组a,有10个元素*/
float b[10], c[20];/*说明实型数组b,有10个元素,实型数组c,有20个元素*/
char ch[20];/*说明字符数组ch,有20个元素*/
对于数组类型说明应注意以下几点:
1、数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。
2、数组名的书写规则应符合标识符的书写规定。
3、数组名不能与其它变量名相同。例如:
4、方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0], a[1], a[2], a[3], a[4]。
5、不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。例如:
是合法的。但是下述说明方式是错误的。
6、允许在同一个类型说明中,说明多个数组和多个变量。例如:
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。[1]目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。