//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.理解兩個集合的並集與交集的含義,會求兩個簡單集合的並集與交集 理解在給定集合中乙個子集的補...