C语言数据结构基础学习笔记——动态查找表
动态查找表包括二叉排序树和二叉平衡树。
二叉排序树:也叫二叉搜索树,它或是一颗空树,或是具有以下性质的二叉树:
①若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
②若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
③它的左右子树也是二叉排序树。
由此可得,对二叉排序树进行中序遍历可以得到一个递增的有序数列。
二叉排序树的查找:将关键字与根结点相比较
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语言数据结构基础学习笔记——动态查找表的更多相关文章
- C语言数据结构基础学习笔记——静态查找表
查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找. 查找表:用于查找的数据集合称为查找表,一般有以下操作:①查找是否在表中:②查找属性:③进行操作. 查找表又分为: ①静态查找表:只可以进行 ...
- C语言数据结构基础学习笔记——基础线性表
线性表是指具有相同数据类型的n(n>=0)个数据元素的有限序列,它具有一个表头元素和一个表尾元素,并且每一个数据元素最多只有一个直接前驱和一个直接后继. 线性表的顺序存储也叫作顺序表,它的特性是 ...
- C语言数据结构基础学习笔记——B树
2-3树:是一种多路查找树,包含2结点和3结点两种结点,其所有叶子结点都在同一层次. 2结点:包含一个关键字和两个孩子(或没有孩子),其左孩子的值小于该结点,右孩子的值大于该结点. 3结点:包含两个关 ...
- C语言数据结构基础学习笔记——树
树是一种一对多的逻辑结构,树的子树之间没有关系. 度:结点拥有的子树数量. 树的度:树中所有结点的度的最大值. 结点的深度:从根开始,自顶向下计数. 结点的高度:从叶结点开始,自底向上计数. 树的性质 ...
- C语言数据结构基础学习笔记——栈和队列
之前我们学过了普通的线性表,接下来我们来了解一下两种特殊的线性表——栈和队列. 栈是只允许在一端进行插入或删除的线性表. 栈的顺序存储结构也叫作顺序栈,对于栈顶指针top,当栈为空栈时,top=-1: ...
- C语言数据结构基础学习笔记——C语言基础
抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作,通常用(数据对象,数据关系,基本操作集)这样的三元组来表示抽象数据类型. 数据结构是相互之间存在一种或多种特定关系的数据元素的集合, ...
- C语言数据结构基础学习笔记——图
图(G)由顶点集(V)和边集(E)组成,G=(V,E) 常用概念: ①V(G)表示图G中顶点的有限非空集,V永不为空: ②用|V|表示图G中顶点的个数,也称为图G的阶: ③E(G)表示图G中顶点之间关 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Oracle基础学习笔记
Oracle基础学习笔记 最近找到一份实习工作,有点头疼的是,有阶段性考核,这...,实际想想看,大学期间只学过数据库原理,并没有针对某一数据库管理系统而系统的学习,这正好是一个机会,于是乎用了三天时 ...
随机推荐
- mybatis 源码分析一
1.SqlSessionFactoryBuilder public SqlSessionFactory build(InputStream inputStream, String environme ...
- s21day21 python笔记
s21day21 python笔记 一.内容回顾及补充 内置函数补充 type():查看数据类型 class Foo: pass obj = Foo() if type(obj) == Foo: pr ...
- SQLI DUMB SERIES-13
(1)检测闭合方式 通过 ') 闭合. (2)尝试输入 admin')# 无回显.尝试报错注入, 爆表payload: admin') and extractvalue(1,concat(0x7e,( ...
- Java基于opencv—归一化
Opencv中提供了resize函数,可以把图像调整到相同大小 Java中resize函数的声明,内部调用的都是native方法 public static void resize(Mat src, ...
- Windows下部署Apache RocketMQ
一:环境准备: Windows.JDK1.8+.Maven.Git 二:RocketMQ准备: 1.http://rocketmq.apache.org/release_notes/release- ...
- tp3.2 D 和 M 的区别
ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 M方法: 对数据表进 ...
- 实验六 CC2530平台上P2P通信的TinyOS编程
实验六 CC2530平台上P2P通信的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步的掌握射频通信TinyOS编程方法 学生通过本实验应理解TinyOS中 ...
- 在VMware上安装CentOS6 64位操作系统
---恢复内容开始--- 1.创建新的虚拟机 2.选择自定义,点击下一步: 3.找到镜像位置,添加: 4.点击“稍后安装操作系统”,点击“下一步”: 5.默认点击“下一步”,然后分配CPU: 这里内存 ...
- Nginx配置之负载均衡、限流、缓存、黑名单和灰度发布
一.Nginx安装(基于CentOS 6.5) 1.yum命令安装 yum install nginx –y(若不能安装,执行命令yum install epel-release) 2. 启动.停止和 ...
- 恢复win7快捷方式小箭头
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons&q ...