用順序表求集合的交集 並集和差集

2021-07-05 11:07:33 字數 3833 閱讀 5871

使用順序表時, 需要定義乙個陣列來儲存順序表中的所有元素和定義乙個整型變數來儲存順序表的長度。假定陣列用data[maxsize]表示,長度整型變數用length表示,並採用結構體型別表示,元素型別採用通用型別識別符號elemtype,則順序表的儲存結構定義如下:

#define maxsize 50

typedef int elemtype;

typedef structsqlist;

用順序表,求集合a與b交集

思路:求 c=a

⋂bc=a \bigcap b

c=a⋂

b, c

cc中元素是a、b

a、ba、

b中的公共元素。掃瞄a

aa中的元素a.d

ata[

i]a.data[i]

a.data

[i],若它與b

bb中某個元素相同,表示是交集元素,將其放到c

cc中,演算法如下:

//求a∩b

void intersection(sqlist *&a,sqlist *&b,sqlist *&c)

} c->length=k;

}

用順序表,求集合a與b的並集

思路:求c=a

⋃bc=a \bigcup b

c=a⋃

b中元素為a

aa和b

bb中非重複出現的所有元素。現將a

aa複製到c

cc中,然後掃瞄b

bb中的元素b.d

ata[

i]b.data[i]

b.data

[i], 若它與a

aa中所有元素均不相同,表示是並集元素,將其放到c

cc中。演算法如下:

//求a∪b

void union(sqlist *&a,sqlist *&b,sqlist *&c)

c->length += k; //修改集合長度

}

用順序表,求集合a與b之間的差集

思路:求c=a

−bc=a-b

c=a−

b, c

cc中元素為a

aa中所有不屬於b

bb的元素, 然後掃瞄a

aa中的元素a.d

ata[

i]a.data[i]

a.data

[i], 若它與b

bb中所有元素均不相同,表示是差集元素,將其放到c

cc中。演算法如下:

//求a-b

void different(sqlist *&a, sqlist *&b,sqlist *&c)

c->length=k; //修改集合長度

}

完整**如下:

#include #include #define maxsize 50

typedef int elemtype;

typedef structsqlist;

void initlist(sqlist *&l)

void destroylist(sqlist *l)

int listempty(sqlist *l)

int listlength(sqlist *l)

void displist(sqlist *l)

int getelem(sqlist *l,int i,elemtype &e)

int locateelem(sqlist *l,elemtype e)

int listinsert(sqlist *&l,int i,elemtype e)

int listdelete(sqlist *&l,int i,elemtype &e)

//主函式.cpp

#include "shunbase.h"

#include //求a∩b

void intersection(sqlist *&a,sqlist *&b,sqlist *&c)

} c->length=k;

}//求a∪b

void union(sqlist *&a,sqlist *&b,sqlist *&c)

c->length += k; //修改集合長度

}//求a-b

void different(sqlist *&a, sqlist *&b,sqlist *&c)

c->length=k; //修改集合長度

}void main()

// displist(ls);

// elemtype e;

// //獲取第乙個元素

// getelem(ls,1,e);

// printf("\n%d\n",e);

// //獲取第三個元素

// getelem(ls,3,e);

// printf("%d\n",e);

// //在第3個元素之後,插入15

// listinsert(ls,3,15);

// displist(ls);

sqlist *a = (sqlist*)malloc(sizeof(sqlist));

a->length=0;

a->data[0]=2;

a->data[1]=5;

a->data[2]=10;

a->data[3]=7;

a->data[4]=16;

a->length=5;

sqlist *b = (sqlist*)malloc(sizeof(sqlist));

b->data[0]=3;

b->data[1]=5;

b->data[2]=7;

b->length=3;

sqlist *c = (sqlist*)malloc(sizeof(sqlist));

c->length=0;

displist(a);

displist(b);

//1) c=a∩b

//intersection(a,b,c);

//2) c=a∪b

union(a,b,c);

//3) c=a-b

//different(a,b,c);

displist(c);

}

效果如下:

圖(1) 交集 $c=a \bigcap b$

圖(2) 並集$c=a\bigcup b$

圖(3) 差集$c=a-b$

圖示操作如下:

圖(4) a與b的交集為c

圖(5) a與b的並集為c

圖(6)差集c = a-b

順序表的交集 並集 差集

using namespace std define maxsize 20 define true 1 define false 0 typedef bool status status是函式的型別,其值是函式結果狀態 typedef char elemtype elemtype型別根據實際情況而定...

scala中集合求交集 並集 差集

前言 scala中的集合set,用於存放無序非重複資料 對於非set集合 array arraybuffer list listbuffer 在做交集 並集 差集時必須轉換為set,否則元素不去重沒有意義 而對於非set型別集合元素去重,也有個很好的方法 distinct scala list 1,...

Python 集合的交集,並集,差集

前提 測試中需要給某些應用設定黑名單,所以從.txt檔案中求兩者的差集,就可以篩選出需要測試的應用 思路 將.txt檔案中的資料讀到list列表中,求列表的交集,再輸出到指定目錄 一.list操作的思路 a 1,2,3,4,5,6 b 5,6,7 c 交集c i for i in a if i in...