【数据结构】 链表表示集合并实现并集、交集、差集运算功能

本文介绍了如何使用C++通过双向链表实现集合类,包括构造函数、复制构造函数、析构函数等基本操作。此外,还详细阐述了集合的查重、插入、删除、遍历等功能,并提供了求集合的并集、交集和差集的友元函数。最后,通过main函数进行了功能测试。
摘要由CSDN通过智能技术生成

总源代码在最后

  • 双向链表:
template<typename T>
struct  Node
{
	T data;
	Node* next;
	Node* prior;
};
  • 链表集合类
template<typename T>
class ListSet
{
public:
  ListSet() ;
  ListSet(const ListSet<T>& Set);
  ~ListSet();
  int getlength()const ;
  int findRepeated(T element);
  void push(T  element);
  void pop();
  void deleteelement(int index);
  void insert(int index, T element);
  void print();
  T& operator[](int index);
  Node<T>* GetelementNode(int index)const;
  void MinusAnotherSet(ListSet & set);
  friend ListSet<T> UnionSet(ListSet<T>& Set1, ListSet<T>&   Set2);
  friend ListSet<T> IntersectionSet(ListSet<T> & Set1, ListSet<T> &Set2);
private:
	Node<T>* head;
	int length;
  • 构造函数
ListSet() :length(0)
{
	head = new Node<T>;
	head->next = head;
	head->prior = head;
}
  • 复制构造函数
ListSet(const ListSet<T>& Set):length(0)
	{
		head = new Node<T>;
		head->next = head;
		head->prior = head;
		Node<T>* p = Set.GetelementNode(1);
		for (int i = 1; i <= Set.getlength(); i++)
		{
			this->push(p->data);
			p = p->next;
		}
	}
  • 析构函数
~ListSet()
	{
		while (length)  pop();
		delete head;
	}
  • 获取长度
int getlength()const { return length; }
  • 查重,若重返回下标,若无返回0
int findRepeated(T element)
{
	Node<T>* p = head;
	for (int i = 1; i <= length; i++)
	{
		p = p->next;
		if (element == p->data) return i;
	}
	return 0;
} 

	

  • push入表
void push(T  element)
	{
		if (findRepeated(element))
		{
			cout << "element repeated is not supported by set" << endl;
			return;
		}
		Node<T>* s = new Node<T>;
		s->data = element;
		head->prior->next = s;
		s->prior = head->prior;
		s->next = head;
		head->prior = s;
		length&
  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值