【数据结构】数据结构实现 4.1:集合_基于二分搜索树实现(C++版)

数据结构实现 4.1:集合_基于二分搜索树实现(C++版)
1. 概念及基本框架
2. 基本操作程序实现
2.1 增加操作
2.2 删除操作
2.3 查找操作
2.4 其他操作
3. 算法复杂度分析
3.1 增加操作
3.2 删除操作
3.3 查找操作
4. 完整代码
1. 概念及基本框架
集合 是一种高级数据结构,其实现方法也不唯一,但存储上使用 链式存储(即内存的物理空间是不连续的)。这一节我们通过 二分搜索树 来实现集合这种数据结构。

集合 的基本特性:集合内的元素 不能重复 。
注:有些集合(多重集合)中元素也可以重复。
显然,二分搜索树满足集合的特性,所以我们尝试利用二分搜索树来实现集合。
我们先利用一个由 纯虚函数 构成的 抽象类 作为一个接口来定义这些操作。具体代码如下:
下面只需要通过继承 抽象类,并且重写 纯虚函数 ,就可以完成 集合 的实现。集合类的框架如下:
这里为了避免重复设计就可以兼容更多数据类型,引入了 泛型 ,即 模板 的概念。(模板的关键字是 class 或 typename)
这里的 bst 表示一棵 二分搜索树 ,同样,为了保护数据,变量设置为 private 。
注:这里没有显式的给出构造函数,因为子类中除了二分搜索树对象之外没有特别需要初始化的东西。编译器会默认先调用 二分搜索树 类(即父类)的构造函数,再去调用 集合 类(即子类)的构造函数。
实现了前面的程序之后,接下来就是一个集合的增、删、查以及一些其他基本操作,接下来利用代码去实现。
2. 基本操作程序实现
2.1 增加操作
直接调用二分搜索树的增加操作。(因为二分搜索树中的元素本来就不重复)
2.2 删除操作
直接调用二分搜索树的删除操作。
2.3 查找操作
2.4 其他操作
集合还有一些其他的操作,包括 集合大小 的查询等操作。
3. 算法复杂度分析
因为集合操作直接调用了二分搜索树的操作,所以其操作的时间复杂度和二分搜索树相同。
3.1 增加操作

3.3 删除操作

3.3 查找操作

总体情况:

很显然,利用二分搜索树很容易实现集合这一高级数据结构。
4. 完整代码
程序完整代码(这里使用了头文件的形式来实现类)如下,本节不再提供 二分搜索树 类的实现代码,如有需要,可参看 3.1 。
抽象类 接口代码:
集合类 代码: