不使用 C++ STL 容器实现集合

28 Aug 2024 | 5 分钟阅读

集合定义为元素的集合,其中每个元素都是唯一的。它与数组不同,因为集合可以有可变长度。一旦添加到集合中的元素不能更改。如果我们要添加相同的修改后的数字,请删除该数字并在集合中添加修改后的数字。

以下是对集合可以执行的操作:

  • add(value) - 此函数在集合中添加一个元素
  • intersectionSet(S) - 返回集合 S 中两个集合的交集
  • toArray() - 将集合转换为元素数组
  • contains(s) - 如果要搜索的元素存在于集合中,则返回该集合
  • displaySet() - 从头到尾打印集合
  • getSize() - 获取集合的大小
  • unionSet(s) - 显示两个集合与集合 s 的并集

使用 BST 实现集合

集合数据结构内部实现 BST(二叉搜索树)数据结构。因此,我们将在树中添加元素,并使用此树模板来实现集合。

  • 创建 BST 模板

在树中,我们有三个成员 - 节点的数据以及指向节点的左指针和右指针。如下所示 -

创建树后,我们使用 insert() 函数将节点插入树中。在 BST 中,小于根的数据位于树的左侧,而大于根的数据位于树的右侧。

containsNode() 函数用于检查节点是否存在于树中。

inorder() 函数用于打印 BST 的中序遍历。

  • 在 Set 类中实现 BST 模板

在为集合的内部工作创建 BST 后,将创建一个集合模板来实现 BST。它有一个根指针节点来存储数据,并且 size 变量返回集合的大小。

Set 类有一个默认构造函数将 BST 的根初始化为 NULL,还有一个复制构造函数将一个集合复制到另一个集合。

add() 函数用于向集合中添加值。它通过调用 containsNode() 函数不向集合中添加重复数据。如果有新元素,则将其添加到集合中。

contains() 函数检查特定元素是否存在于集合中。它在内部调用 BST 中的 containsNode()

displaySet() 函数用于打印集合元素。它在内部调用 BST 的 inorder() 函数。

getSize() 函数返回集合的大小。

编码

输出

A = { 1 2 3 }
A contains 3
A does not contain 4