C語言資料結構之求兩個集合的交集(鍊錶)

2022-08-30 12:03:08 字數 1561 閱讀 7594

//1:求兩集合的交集(鍊錶)。

#include #include struct node  ;  

void push(struct node **head_ref, int new_data); //新增資料元素宣告

bool ispresent(struct node *head, int data); //判斷是否存在函式宣告

/* struct node *getunion(struct node *head1, struct node *head2)//求並集函式

while(t2 != null)

return result;

} */

struct node *getintersection(struct node *head1, struct node *head2) //求交集函式

return result;

} void push(struct node**head_ref, int new_data) //新增資料成員函式

void printlist(struct node *node) //輸出鍊錶函式

} bool ispresent(struct node *head, int data) //判斷是否存在

return 0;

} int main()

/*時間複雜度:在這個程式中,鍊錶的並和交操作的時間複雜度都是o(mn),m是鍊錶1的元素個數,n是鍊錶2的元素個素。

方法2(使用歸併排序):

使用這個方法,求2個鍊錶的並集和交集的操作非常相似。首先,將對2個鍊錶進行排序,然後遍歷2個鍊錶,得到2個了表

的交集和並集。

下面是具體實現步驟:

用歸併排序對第1個鍊錶進行排序,這個操作的時間複雜度為o(mlogm).

用歸併排序堆第2個鍊錶進行排序,這個操作的時間複雜度為o(nlogn).

線性遍歷2個有序的鍊錶,得到2個鍊錶的交集和並集。這個操作的時間複雜度為o(m+n).[這步類似於求有序陣列的交集和並集,後

者之前已經實現過,點選這裡檢視詳細]

這個方法的時間複雜度是o(mlogm+ nlogn),優於第一種方法。

方法3(hash法):

union(list1, list2)

首先初始化結果鍊錶為null,建立乙個空的hash表,遍歷兩個鍊錶,將鍊錶中的元素插入到hash表,插入元素的時候同時

檢查hash表中時候是否已經存在該元素,如果hash表中不存在該元素,則同時將該元素插入到結果鍊錶中,如果hash表中

已經存在,則忽略該元素,繼續遍歷下乙個元素。

intersection(list1, list2)

首先初始化結果鍊錶為null,建立乙個空的hash表,遍歷list1,將list1中的每乙個元素都插入到hash表中。然後遍歷

list2,對於list2中的元素,如果已經存在於hash表中,則將該元素插入到結果鍊錶,如果不存在與hash表中,則忽略

該元素,繼續遍歷下乙個元素。

這個方法的效率取決與hash表的實現技術,一般情況下,這個方法都比上面兩種要好。*/

求兩個集合是否有交集 c語言 集合之間的關係

知識點梳理 1 兩個集合之間的包含關係 子集 真子集與全集 1 子集 真子集 定義1 對於兩個集合與,如果集合的任何乙個元素都屬於集合,那麼集合叫作集合 的子集,記作 或 讀作 包含於或包含 注1 1 有兩種可能 中所有元素是中的一部分元素 與是中的所有元素都相同 2 空集是任何集合的子集 任何乙個...

求兩個集合的差集

在c 語言的程式設計開發中,針對list集合的運算有時候需要計算兩個list集合的差集資料,集合的差集是取在該集合中而不在另一集合中的所有的項。a集合針對b集合的差集資料指的是所有在a集合但不在b集合的元素。在c 語言中可以使用except方法來計算兩個list集合的差集資料,簡單快捷只需要一條語句...

求兩個集合是否有交集 c語言 堯哥說集合

1.了解集合的含義,體會元素與集合的屬於關係 能用自然語言 圖形語言 集合語言 列舉法或描述法 描述不同的具體問題 2.理解集合之間包含與相等的含義,能識別給定集合的子集 在具體情境中了解全集與空集的含義 3.理解兩個集合的並集與交集的含義,會求兩個簡單集合的並集與交集 理解在給定集合中乙個子集的補...