集合運算(整數區間) C實現

2021-10-11 21:42:42 字數 2157 閱讀 4004

最近寫專案**裡用到很多整數區間運算,呼叫頻率很高,想著網上有沒有好的封裝借鑑一下。奈何一頓搜尋猛如虎,合用封裝基本無。不如自己寫乙個了。

話不多說,直接上**,備註完善,測試可用。

#include

#include

#include

#define left(p) (p[0])

#define right(p) (p[1])

intmax

(int x,

int y)

intmin

(int x,

int y)

/** * @brief 判斷兩個整數區間是否重疊

* @param x 區間: [x[0], x[1]]

* @param y 區間: [y[0], y[1]]

* @return true 重疊; false 不重疊

*/bool overlap

(const

int* x,

const

int* y)

/** * @brief 交集(整數區間)

* @param x 區間: [x[0], x[1]]

* @param y 區間: [y[0], y[1]]

* @param is 所求交集

* @return true 有交集; false 無交集

*/bool intersection

(const

int* x,

const

int* y,

int* is)

return false;

}/**

* @brief 差集(整數區間): 屬於x但不屬於y 區間合法性由呼叫者保證

* @param x 區間: [x[0], x[1]]

* @param y 區間: [y[0], y[1]]

* @param ds 差集區間

* @param n 返回的差集數量

*/void

differenceset

(const

int* x,

const

int* y,

int ds[

2],int

* n)if(

right

(is)

<

right

(x))

}else

*n = c;

}/**

* @brief 集合運算(整數區間)

* 區間有效性由呼叫者保證: 有效區間 x 滿足 left(x) <= right(x)

*/int

main()

}

# 生成測試檔案 a.out

gcc interval.c

$ ./a.out

請輸入整數區間x: 5 9

請輸入整數區間y: 1 4

不相交差集: [5 9]

$ ./a.out

請輸入整數區間x: 5 9

請輸入整數區間y: 10 19

不相交差集: [5 9]

$ ./a.out

請輸入整數區間x: 5 9

請輸入整數區間y: 5 9

交集: [5 9]

差集為空(區間 y 包含區間 x)

$ ./a.out

請輸入整數區間x: 5 9

請輸入整數區間y: 5 6

交集: [5 6]

差集: [7 9]

$ ./a.out

請輸入整數區間x: 5 9

請輸入整數區間y: 6 9

交集: [6 9]

差集: [5 5]

$ ./a.out

請輸入整數區間x: 5 9

請輸入整數區間y: 4 10

交集: [5 9]

差集為空(區間 y 包含區間 x)

$ ./a.out

請輸入整數區間x: 5 9

請輸入整數區間y: 4 8

交集: [5 8]

差集: [9 9]

$ ./a.out

請輸入整數區間x: 5 9

請輸入整數區間y: 6 560

交集: [6 9]

差集: [5 5]

整數集合運算(過載)

編寫乙個程式,通過過載運算子 實現乙個整數集合的基本運算 1 int1 int2 兩個整數集合的並運算 2 int1 int2 兩個整數集合的差運算 輸入 5 2 5 66 1 79 32 66 28 結果 int1 int2 2 5 66 1 79 28 int1 int2 5 1 79 注 第1...

整數集合運算(過載)

編寫乙個程式,通過過載運算子 實現乙個整數集合的基本運算 1 int1 int2 兩個整數集合的並運算 2 int1 int2 兩個整數集合的差運算 輸入 5 2 5 66 1 79 32 66 28 結果 int1 int2 2 5 66 1 79 28 int1 int2 5 1 79 注 第1...

(C)順序表實現集合運算

1 用陣列a,b,c,e表示集合。假定a b e 輸入陣列a,b,e 全集 輸入資料時要求檢查資料是否重複 集合中的資料要求不重複 要求集合a,b是集合e的子集。2 兩個集合的並運算 把陣列a中各個元素先儲存在陣列c中。將陣列b中的元素逐一與陣列a中的元素進行比較,把不相同的元素新增到陣列c中,陣列...