递增有序的顺序表表示集合,求解两个集合的交集 并集 差集(c语言实现)
2016-09-26 20:02
1236 查看
#include<stdio.h>
#include<stdlib.h>
#define max 100
typedef struct {
int elem[max];
int length;
}List;
void UnionList();
void IntersectionList();
void setdifferenceList();
void DataSort(List &L, int n);
int main(){
UnionList();
IntersectionList();
setdifferenceList();
return 0;
}
//并集
void UnionList() {
int i, j, e;
List La, Lb;
printf("并集\n");
printf("请输入集合A,集合B元素的个数:\n");
scanf("%d %d", &La.length, &Lb.length);
printf("请输入集合A的元素:\n");
for (i = 0; i < La.length; i++){
scanf("%d", &La.elem[i]);
}
printf("请输入集合B的元素:\n");
for (i = 0; i < Lb.length; i++){
scanf("%d", &Lb.elem[i]);
}
for (i = 0; i<Lb.length; i++)
{
e = Lb.elem[i];
j = 0;
while ((j<La.length) && (La.elem[j] != e))
j++;
if (j == La.length){
La.elem[La.length] = e;
La.length++;
}
}
DataSort(La, La.length);
for (i = 0; i<La.length; i++) {
printf("%d ", La.elem[i]);
}
printf("\n");
}
//交集
void IntersectionList(){
int i, j, d = 0;
List La, Lb, Lc;
printf("交集\n");
printf("请输入集合A,集合B元素的个数:\n");
scanf("%d %d", &La.length, &Lb.length);
printf("请输入集合A的元素:\n");
for (i = 0; i < La.length; i++){
scanf("%d", &La.elem[i]);
}
printf("请输入集合B的元素:\n");
for (i = 0; i < Lb.length; i++){
scanf("%d", &Lb.elem[i]);
}
for (i = 0; i<La.length; i++) {
for (j = 0; j<Lb.length; j++){
if (La.elem[i] == Lb.elem[j]){
Lc.elem[d++] = La.elem[i];
break;
}
}
}
DataSort(Lc, d);
for (i = 0; i<d; i++) {
printf("%d ", Lc.elem[i]);
}
printf("\n");
}
//差集
void setdifferenceList() {
int i, j, d = 0, c;
List La, Lb, Lc;
printf("差集\n");
printf("请输入集合A,集合B元素的个数:\n");
scanf("%d %d", &La.length, &Lb.length);
printf("请输入集合A的元素:\n");
for (i = 0; i < La.length; i++){
scanf("%d", &La.elem[i]);
}
printf("请输入集合B的元素:\n");
for (i = 0; i < Lb.length; i++){
scanf("%d", &Lb.elem[i]);
}
for (i = 0; i<La.length; i++) {
c = 0;
for (j = 0; j<Lb.length; j++){
if (La.elem[i] != Lb.elem[j]){
c++;
}
}
if (c == Lb.length)
Lc.elem[d++] = La.elem[i];
}
DataSort(Lc, d);
for (i = 0; i<d; i++) {
printf("%d ", Lc.elem[i]);
}
printf("\n");
}
//排序
void DataSort(List &L, int n) {
int i, j, temp;
for (i = 0; i<n - 1; i++){
for (j = i + 1; j<n; j++){
if (L.elem[j]<L.elem[i]) {
temp = L.elem[j];
L.elem[j] = L.elem[i];
L.elem[i] = temp;
}
}
}
}
#include<stdlib.h>
#define max 100
typedef struct {
int elem[max];
int length;
}List;
void UnionList();
void IntersectionList();
void setdifferenceList();
void DataSort(List &L, int n);
int main(){
UnionList();
IntersectionList();
setdifferenceList();
return 0;
}
//并集
void UnionList() {
int i, j, e;
List La, Lb;
printf("并集\n");
printf("请输入集合A,集合B元素的个数:\n");
scanf("%d %d", &La.length, &Lb.length);
printf("请输入集合A的元素:\n");
for (i = 0; i < La.length; i++){
scanf("%d", &La.elem[i]);
}
printf("请输入集合B的元素:\n");
for (i = 0; i < Lb.length; i++){
scanf("%d", &Lb.elem[i]);
}
for (i = 0; i<Lb.length; i++)
{
e = Lb.elem[i];
j = 0;
while ((j<La.length) && (La.elem[j] != e))
j++;
if (j == La.length){
La.elem[La.length] = e;
La.length++;
}
}
DataSort(La, La.length);
for (i = 0; i<La.length; i++) {
printf("%d ", La.elem[i]);
}
printf("\n");
}
//交集
void IntersectionList(){
int i, j, d = 0;
List La, Lb, Lc;
printf("交集\n");
printf("请输入集合A,集合B元素的个数:\n");
scanf("%d %d", &La.length, &Lb.length);
printf("请输入集合A的元素:\n");
for (i = 0; i < La.length; i++){
scanf("%d", &La.elem[i]);
}
printf("请输入集合B的元素:\n");
for (i = 0; i < Lb.length; i++){
scanf("%d", &Lb.elem[i]);
}
for (i = 0; i<La.length; i++) {
for (j = 0; j<Lb.length; j++){
if (La.elem[i] == Lb.elem[j]){
Lc.elem[d++] = La.elem[i];
break;
}
}
}
DataSort(Lc, d);
for (i = 0; i<d; i++) {
printf("%d ", Lc.elem[i]);
}
printf("\n");
}
//差集
void setdifferenceList() {
int i, j, d = 0, c;
List La, Lb, Lc;
printf("差集\n");
printf("请输入集合A,集合B元素的个数:\n");
scanf("%d %d", &La.length, &Lb.length);
printf("请输入集合A的元素:\n");
for (i = 0; i < La.length; i++){
scanf("%d", &La.elem[i]);
}
printf("请输入集合B的元素:\n");
for (i = 0; i < Lb.length; i++){
scanf("%d", &Lb.elem[i]);
}
for (i = 0; i<La.length; i++) {
c = 0;
for (j = 0; j<Lb.length; j++){
if (La.elem[i] != Lb.elem[j]){
c++;
}
}
if (c == Lb.length)
Lc.elem[d++] = La.elem[i];
}
DataSort(Lc, d);
for (i = 0; i<d; i++) {
printf("%d ", Lc.elem[i]);
}
printf("\n");
}
//排序
void DataSort(List &L, int n) {
int i, j, temp;
for (i = 0; i<n - 1; i++){
for (j = i + 1; j<n; j++){
if (L.elem[j]<L.elem[i]) {
temp = L.elem[j];
L.elem[j] = L.elem[i];
L.elem[i] = temp;
}
}
}
}
相关文章推荐
- 线性表的顺序表 实现,及应用-----西文排序+前m个元素和后n个元素进行整体互换+构造纯集合+有序表求纯集合+循环有序链表表示两集合的并集
- 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表C
- 数据结构链表习题2.27,假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表
- Java 两个有序集合 求交集 差集
- 求两个数组的交集、并集和差集算法分析与实现
- 获取两个DataTable之间的差集、交集、并集集合(Except、Intersect、Union)
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 重载运算符“+”、“*”、“-”实现集合的并集、交集、差集运算
- 求两个集合的交集、差集和并集
- 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
- 求两个集合的交集以及求两个有序数组并集的第k小元素
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 求两个数组的交集、并集和差集算法分析与实现
- 求两个数组的交集、并集和差集算法分析与实现
- 求两个集合的交集,并集,差集
- 两个有序数组交集与并集的实现
- 两个DataTable之间的差集、交集、并集集合(Except、Intersect、Union)
- 两个数组并集 交集 差集的算法思想与实现
- 用C++标准库算法求两个集合的交集、并集、差集
- Python 两个列表的差集、并集和交集实现代码