⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 set.h

📁 安全数组 普通链表 哈希表 二叉搜索树 AVL树 集合类 通用自动机 所有类均使用模板编写
💻 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 + -