特点:元素不能重复、各个元素之间没有关系、没有顺序,集合内的元素可以是单元素或者是集合。

    对集合的操作:交集并集差集等,还有对自身的加减等。

    需要频繁的加减元素,所以顺序存储效率较低,但是我们还是说一下是怎么实现的:用0,1向量表示集合,因为现实中任何一个有穷集合都能对应到一个0、1、2…..n这么一个序列中。所以可以对应过来,每位的0,1代表这个元素存在与否即可。

    链接存储表示使用有序链表来实现,虽然集合是无序的,但是我们的链表可以是有序的。可以按升序排列。而链表理论上可以无限增加,所以链表可以表示无限集。

    定义一个节点:

    1. typedef int ElemType;
    2. typedef struct SetNode{//节点定义
    3. ElemType data;//数据
    4. struct SetNode * link;
    5. }*LinkedSet//集合定义

    插入:我们对于一个新元素,查找集合中是否存在,存在就不插入,不存在就插入到查找失败位置。
    删除:删除也简单,查找存在就删除。

    两个集合的操作:
    两个链表,都是升序。把他们去重合并即可。
    其实和链表归并的merge过程是一样的,只是相等的时候插入一个,两个指针都向后走就行了。