二叉查找树的基类实现(上)
来源:互联网 发布:指南针指标公式源码 编辑:程序博客网 时间:2024/06/15 23:45
二叉查找树的基类实现(总)
现在有这几个文件:
objectclass.h 定义一种数据基类型,以便查找树节点使用
当后面要用到数据类型是就继承它
IntClass.h 定义整数数据类型,从ObjetClass类继承而来
StringClass.h 定义字符串数据类型,从ObjetClass类继承而来
BinaryTreeNode.h 定义树的节点
具有关键字(key),值(value),父节点指针,儿子节点指针
BSTree.h 定义二叉搜索树
具有搜索 (get) ,插入(insert),删除(remove),遍历输出(output)功能.
其他部分具体的实现是容易的,只有删除操作稍微麻烦一点,在使用模板类的实现时讨论。
与模板类实现相比缺点是不是很方便,因为它节点内部的数据类型是自己定义类结构
必须从ObjectClass类继承而来,这就不能直接使用C++库中已经存在的数据类型。
就像例子中的使用整数数据类型都要自己定义一下,很不方便。
优点是它可以使用多态,后面的AVL树和红黑树将继承它。
后续将一步一步实现这个数据结构。
为了便于打印出树的结构,对代码做一些修改,并且加入一个新的类Queue(见附加部分)。
二叉查找树的基类实现(一)
ObjectClass 类的定义和实现
objectclass.h 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef OBJECT_CLASS_H
#define OBJECT_CLASS_H
#include <iostream>
using
namespace
std;
class
ObjectClass
{
public
:
ObjectClass();
~ObjectClass();
public
:
virtual
int
Compare(ObjectClass *objcls);
virtual
void
OutPut();
//取类的度量大小,以便排序
virtual
float
getValue();
//取长度,表示输出的长度以便输出控制
virtual
int
getLength();
};
#endif
objectclass.cpp 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "objectclass.h"
ObjectClass::ObjectClass()
{
}
ObjectClass::~ObjectClass()
{
}
int
ObjectClass::Compare(ObjectClass *objcls)
{
cout<<
"compare from abstract"
<<endl;
return
0;
}
void
ObjectClass::OutPut()
{
cout<<
"The abstract class"
<<endl;
}
float
ObjectClass::getValue()
{
return
0;
}
int
ObjectClass::getLength()
{
return
0;
二叉查找树的基类实现(二)
下面是整数数据类型的定义和实现
IntClass.h 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef INTCLASS_H
#define INTCLASS_H
#include "objectclass.h"
class
IntClass:
public
ObjectClass
{
private
:
int
data;
int
length;
public
:
IntClass();
IntClass(
int
data);
public
:
int
Compare(ObjectClass *objcls);
virtual
void
OutPut();
float
getValue();
int
getLength();
};
#endif
IntClass.cpp 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "IntClass.h"
IntClass::IntClass()
{
data=0;
length = 0;
}
IntClass::IntClass(
int
data)
{
length = 0;
this
->data=data;
if
(data == 0)length = 1;
while
(data>0)
{
data=data/10;
length++;
}
}
//比较大小函数,如果返回-1就小,返回1就大,返回0就相等
int
IntClass::Compare(ObjectClass *objcls)
{
if
(data < objcls->getValue())
return
-1;
else
if
(data > objcls->getValue())
return
1;
else
return
0;
}
float
IntClass::getValue()
{
return
data;
}
void
IntClass::OutPut()
{
cout<<data;
}
int
IntClass::getLength()
{
return
length;
}
本文出自:http://www.cnblogs.com/xiao-cheng/category/325955.html
- 二叉查找树的基类实现(上)
- 二叉查找树的基类实现(中)
- 二叉查找树的基类实现(下)
- 算法导论上二叉查找树的实现java
- 二叉树类的实现(查找树)
- 二叉查找树的类模板实现
- 二叉查找树(BST)的实现
- 二叉查找树的实现(c++)
- 二叉查找树的实现
- 二叉查找树的实现
- 二叉查找树的实现
- 二叉查找树的实现
- 二叉查找树的实现
- 二叉查找树的实现
- 二叉查找树的实现
- 二叉查找树的实现
- 二叉查找树的实现
- 二叉查找树实现
- android编译报错 warning: Clock skew detected. Your build may be incomplete. 的解决方式
- 2012年文思创新健康体检须知
- 孔乙己学C语言(1)
- VS2010编写C#代码时..只要想选中一排代码.想复制粘贴..就会出错..然后问我发不发送错误信息..然后就又重启
- 一些思考的问题
- 二叉查找树的基类实现(上)
- iscsi超时设置
- GaussRBFKernel
- Prologue
- shell的字符串截取
- 控制GridView中选中的背景
- Android学习笔记(五二):服务Service(中)- 继承Service类
- log4net地址
- memcached缓存失效时的高并发访问问题解决