编写程序,用于进行集合的并、差和交运算。

您所在的位置:网站首页 C语言集合运算 编写程序,用于进行集合的并、差和交运算。

编写程序,用于进行集合的并、差和交运算。

2023-09-06 11:49| 来源: 网络整理| 查看: 265

编写程序,用于进行集合的并、差和交运算。例如输入整数集合{9 5 4 3 6 7}和{2 4 6 9},计算出它们进行集合的并、差和交运算后的结果。

1)可以用以下表达式实现整数集合的运算: s1+s2 两个整数集合的并运算 s1-s2 两个整数集合的差运算 s1*s2 两个整数集合的交运算

使用C++语言编写 用类gather(集合)来实现这些功能。

gather类的框架

class gather //集合 { public: gather(int n); void show_gather(); gather operator+(gather& g); gather operator-(gather& g); gather operator*(gather& g); int* arr; int size; }; 采用类内声明,类外访问的形式。通过重载运算符实现集合的并,交,差运算。集合用一个数组来表示,通过类的成员变量arr指针来维护。 类外函数实现 构造函数 gather::gather(int n) { arr = new int[n]; size = n; } 重载+号运算符,实现集合的并集

1.先将本身的集合存入临时的一个集合 2.通过两层for循环来寻找本身的集合没有的元素

gather gather::operator+(gather& g) { int s1 = this->size, s2 = g.size,i,j,flag=0,num=0; int* temp = new int[s1+s2]; gather gt(s1 + s2); sort(this->arr, this->arr + s1 - 1); sort(g.arr, g.arr + s2 - 1); for ( i = 0; i arr[i]; for ( j = 0; j int s1 = this->size, s2 = g.size, i, j, flag = 0, num = 0; int* temp = new int[s1 + s2]; bool* isSame = new bool[s1 + s2]; gather gt(s1 + s2); sort(this->arr, this->arr + s1 - 1); sort(g.arr, g.arr + s2 - 1); for (i = 0; i isSame[i] = true; break; } if (j >= s2) { isSame[i] = false; num++; } } for (i = 0; i arr[i]; if (num == 0) { delete[]temp; temp = NULL; } gt.arr = temp; gt.size = flag; return gt; } 重载运算符 * 实现交集

交集其实和差的过程类似,只不过差是需要返回数组中不相同的元素,而交集是需要两个集合都有的元素 核心思想:两层for循环遍历出两个集合中相同的元素。

gather gather::operator*(gather& g) { int s1 = this->size, s2 = g.size, i, j,flag=0, num = 0; int* temp = new int[s1 + s2]; bool* isSame = new bool[s1 + s2]; gather gt(s1 + s2); sort(this->arr, this->arr + s1 - 1); sort(g.arr, g.arr + s2 - 1); for (i = 0; i isSame[i] = true; num++; break; } if (j >= s2) isSame[i] = false; } for (i = 0; i arr[i]; if (num == 0) { delete[]temp; temp = NULL; } gt.arr = temp; gt.size = num; return gt; } 对结果的检验

检验过程其实很简单,只要简单的将结果输出即可。

这里完善一下类内的输出函数

唯一要注意的就是空集,也就是集合元素为0的时候,指针的值是NULL,这时候要直接返回,否则对空地址的范围会报错。

void gather::show_gather() { if (this->arr == NULL) { cout int n1, n2; cout n1 >> n2; Sleep(500); system("cls"); gather g1(n1),g2(n2),g3(n1+n2); for (int i = 0; i arr = new int[n]; size = n; } void gather::show_gather() { if (this->arr == NULL) { cout for (i = 0; i = s1) temp[s1 + (flag++)] = g.arr[j]; else num++; } gt.arr = temp; gt.size = s1 + s2 - num; return gt; } gather gather::operator-(gather& g)//差 { int s1 = this->size, s2 = g.size, i, j, flag = 0, num = 0; int* temp = new int[s1 + s2]; bool* isSame = new bool[s1 + s2]; gather gt(s1 + s2); sort(this->arr, this->arr + s1 - 1); sort(g.arr, g.arr + s2 - 1); for (i = 0; i isSame[i] = true; break; } if (j >= s2) { isSame[i] = false; num++; } } for (i = 0; i arr[i]; if (num == 0) { delete[]temp; temp = NULL; } gt.arr = temp; gt.size = flag; return gt; } gather gather::operator*(gather& g) { int s1 = this->size, s2 = g.size, i, j,flag=0, num = 0; int* temp = new int[s1 + s2]; bool* isSame = new bool[s1 + s2]; gather gt(s1 + s2); sort(this->arr, this->arr + s1 - 1); sort(g.arr, g.arr + s2 - 1); for (i = 0; i isSame[i] = true; num++; break; } if (j >= s2) isSame[i] = false; } for (i = 0; i arr[i]; if (num == 0) { delete[]temp; temp = NULL; } gt.arr = temp; gt.size = num; return gt; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3