动态查找表包括二叉排序树和二叉平衡树。

二叉排序树:也叫二叉搜索树,它或是一颗空树,或是具有以下性质的二叉树:

①若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

②若右子树不空,则右子树上所有结点的值均大于它的根结点的值;

③它的左右子树也是二叉排序树。

由此可得,对二叉排序树进行中序遍历可以得到一个递增的有序数列。

二叉排序树的查找:将关键字与根结点相比较

typedef struct BiTNode{                //二叉排序树结点结构
int data; //结点数据
struct BiTNode *lchild,*rchild; //指向该结点左右孩子的指针
}BiTNode,*BiTree;
//递归代码
BiTNode *BST_Search(BiTNode *t,ElemType key){
if(t==NULL) return NULL;
else{
if(t->data==key) return t;
else if(key<t->data) return BST_Search(t->lchild,key);
else return BST_Search(t->rchild,key);
}
}
//非递归代码
BiTNode *BST_Search(BiTNode *t,ElemType key){
BiTNode *p=t;
while(p!=NULL&&key!=p->data){
if(key<p->data) p=p->lchild;
else p=p->rchild;
}
return p;
}

二叉排序树的插入思想:

①若树空,直接插入新结点,返回成功。

②树不空,若存在该关键字则插入失败,若不存在该关键字,检查根结点的值和大小关系,递归插入。

int BST_Insert(BiTNode* &t,ElemType key){
if(t==NULL){
t=(BiTNode*)malloc(sizeof(BiTNode));
t->data=key;
t->lchild=t->rchild=NULL;
return ;
}
else if(key==t->data) return ;
else if(key<t->data) return BST_Insert(t->lchild,key);
else return BST_Insert(t->rchild,key);
}

构造二叉排序树:从一颗空树开始,依次插入二叉排序树中的结点。

void BST_Creat(BiTNode* &t,ElemType key[],int n){        //n为关键字数量
t=NULL;
int i=;
while(i<n){
BST_Insert(t,key[i]);
i++;
}
}

二叉排序树删除结点:有以下几种可能

①删除的是叶子结点:直接删除;

②删除的是仅有一个左子树或右子树的结点:子承父业,让那个叶子结点代替根结点;

③删除的是左右子树都有的结点:找到待删除结点的直接前驱或者直接后继结点,用该结点来替换待删除结点。

二叉平衡树:是特殊的二叉排序树,其左右子树高度之差的绝对值不超过1,而且左右子树又是一颗平衡二叉树。

C语言数据结构基础学习笔记——动态查找表的更多相关文章

  1. C语言数据结构基础学习笔记——静态查找表

    查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找. 查找表:用于查找的数据集合称为查找表,一般有以下操作:①查找是否在表中:②查找属性:③进行操作. 查找表又分为: ①静态查找表:只可以进行 ...

  2. C语言数据结构基础学习笔记——基础线性表

    线性表是指具有相同数据类型的n(n>=0)个数据元素的有限序列,它具有一个表头元素和一个表尾元素,并且每一个数据元素最多只有一个直接前驱和一个直接后继. 线性表的顺序存储也叫作顺序表,它的特性是 ...

  3. C语言数据结构基础学习笔记——B树

    2-3树:是一种多路查找树,包含2结点和3结点两种结点,其所有叶子结点都在同一层次. 2结点:包含一个关键字和两个孩子(或没有孩子),其左孩子的值小于该结点,右孩子的值大于该结点. 3结点:包含两个关 ...

  4. C语言数据结构基础学习笔记——树

    树是一种一对多的逻辑结构,树的子树之间没有关系. 度:结点拥有的子树数量. 树的度:树中所有结点的度的最大值. 结点的深度:从根开始,自顶向下计数. 结点的高度:从叶结点开始,自底向上计数. 树的性质 ...

  5. C语言数据结构基础学习笔记——栈和队列

    之前我们学过了普通的线性表,接下来我们来了解一下两种特殊的线性表——栈和队列. 栈是只允许在一端进行插入或删除的线性表. 栈的顺序存储结构也叫作顺序栈,对于栈顶指针top,当栈为空栈时,top=-1: ...

  6. C语言数据结构基础学习笔记——C语言基础

    抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作,通常用(数据对象,数据关系,基本操作集)这样的三元组来表示抽象数据类型. 数据结构是相互之间存在一种或多种特定关系的数据元素的集合, ...

  7. C语言数据结构基础学习笔记——图

    图(G)由顶点集(V)和边集(E)组成,G=(V,E) 常用概念: ①V(G)表示图G中顶点的有限非空集,V永不为空: ②用|V|表示图G中顶点的个数,也称为图G的阶: ③E(G)表示图G中顶点之间关 ...

  8. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  9. Oracle基础学习笔记

    Oracle基础学习笔记 最近找到一份实习工作,有点头疼的是,有阶段性考核,这...,实际想想看,大学期间只学过数据库原理,并没有针对某一数据库管理系统而系统的学习,这正好是一个机会,于是乎用了三天时 ...

随机推荐

  1. React中使用echarts

    1.安装相关的依赖: cnpm i react-for-echarts -S cnpm i echarts -S 2.使用方法: 页面引入: import ReactEcharts from 'ech ...

  2. vue项目中全局配置变量

    在项目中api管理需要用到全局变量,创建全局变量的方式也有很多. 1.通过export default const BASEURL = "http://localhost:3333/&quo ...

  3. c++ complie link error 2019/2001

    1:没有将需要的文件添加到项目中,只是考到项目所在的目录了 2:没有添加 类导出 宏

  4. Linux 安装aria2

    Ubuntu/Linux Mint/Debian sudo apt-get install aria2 CentOS/Fedora sudo yum install aria2 Manjaro/Arc ...

  5. JS实现日期选择

    简单的JS实现日期选择,对于PHP来说就像是遍历一样,不过我个人觉得JS这个很有趣,随便记录一下 开始: <select name="gh_date"><opti ...

  6. 前端导出csv

    前端导出csv export: function(data, name) { // csv文件的BOM头 \ufeff可以让excel等识别出csv文件的编码 var uri = 'data:text ...

  7. day09 函数学习

    内容详细 1.函数 1.1.面向过程: 可读性差/可重用差 1.2.面向对象:

  8. laravel-阿里大于

    安装扩展 # 安装curl模块apt-get install curl # 安装php5-curl扩展apt-get install php5-curl # 安装laravel阿里大鱼服务compos ...

  9. laravel 修改时邮箱字段唯一性验证时忽略指定 ID

  10. 使用CUPS打印服务

    目录 1. 测试环境 2 2. CUPS介绍 3 2.1 CUPS的配置文件 3 2.1.1 cupsd.conf 3 2.1.2 cups-files.conf 3 2.1.3 printcap 3 ...