📄 set.h
字号:
/* 集合
* 注意有关集合的数学定义(元素不重复、顺序无关等)
*
*/
#ifndef SET_CLASS
#define SET_CLASS
#include "dclinkedlist.h"
template <class T>
class Set : public DCLinkedList<T>
{
public:
Set(void){};
Set(const Set<T>& L);
// 这里是最常用的操作,集合还有其他操作,暂时没有添加
void Union(const Set<T>& L); // 将当前集合设为两集合的并集
void Intersection(const Set<T>& L); // 将当前集合设为两集合的交集
void Insert(const T& elem); // 插入元素(注意不要调用 DCLinkedList 的插入函数)
void Delete(const T& elem); // 删除元素
};
template <class T>
Set<T>::Set(const Set<T>& L):DCLinkedList<T>(L)
{}
// 并集
template <class T>
void Set<T>::Union(const Set<T>& L)
{
DNode<T> *p = L.header->NextNodeRight();
while (p != L.header)
{
Insert(p->data);
p = p->NextNodeRight();
}
}
// 交集
template <class T>
void Set<T>::Intersection(const Set<T>& L)
{
for (Reset(); !EndOfList(); Next())
if (!L.Find(Data()))
DeleteAt();
}
// 插入操作,不会插入重复元素
template <class T>
void Set<T>::Insert(const T& elem)
{
if (!Find(elem))
InsertAt(elem);
}
template <class T>
void Set<T>::Delete(const T& elem)
{
if (Find(elem))
DeleteAt();
}
#endif // Set_CLASS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -