二叉查找树的基类实现(上)

来源:互联网 发布:指南针指标公式源码 编辑:程序博客网 时间: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>
usingnamespacestd;
classObjectClass
{
public:
    ObjectClass();
    ~ObjectClass();
public:
    virtualintCompare(ObjectClass *objcls);
    virtualvoidOutPut();
    //取类的度量大小,以便排序
    virtualfloatgetValue();
    //取长度,表示输出的长度以便输出控制
    virtualintgetLength();
};
#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;
    return0;
}
  
  
voidObjectClass::OutPut()
{
    cout<<"The abstract class"<<endl;
}
  
floatObjectClass::getValue()
{
    return0;
}
int ObjectClass::getLength()
{
    return0;

 

 

二叉查找树的基类实现(二)

下面是整数数据类型的定义和实现

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"
classIntClass:publicObjectClass
{
private:
    intdata;
    intlength;
public:
IntClass();
IntClass(intdata);
public:
int Compare(ObjectClass *objcls);
virtualvoidOutPut();
floatgetValue();
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(intdata)
{
    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;
    elseif(data > objcls->getValue())
    return1;
    else
    return0;
}
floatIntClass::getValue()
{
    returndata;
}
voidIntClass::OutPut()
{
    cout<<data;
}
int IntClass::getLength()
{
    returnlength;
}

 

 

本文出自:http://www.cnblogs.com/xiao-cheng/category/325955.html

原创粉丝点击