c语言数据结构学习心得——树
树
一对多的树型结构,有且只有一个特定的根结点。
结点的度:结点拥有子树的数量{
度为0:叶子结点/终端结点。
度不为0:非终端结点/分支结点(除去根结点其它称为内部结点)。}
树的度:树中所有结点的度数的最大值。
树的层次:根为第一层,以此类推。
结点的深度:根结点开始,自顶向下累加。
结点的高度:叶结点开始,自底向上累加。
树的高度(深度):树中结点的最大层数。
结点关系:
祖先结点:根结点到该点的唯一路径上的任意结点。
子孙结点
双亲结点:根结点到该点的唯一路径上的最近结点。
孩子结点
兄弟结点:有相同双亲结点的结点。
树中的数学关系:
1.树中的结点数等于所有结点的度数加1。
2.度为m的树中第i层上最多有mi-1个结点。
3.高度为h的m叉树至多有(mn-1)/(m-1)个结点。
4.具有n个结点的m叉树的最小高度为[logm(n(m-1)+1)]
树的存储结构
顺序存储结构
双亲表示法:用一组连续的存储空间存储树的结点,同时在每个结点中,用一个变量存储该结点双亲结点在数组中的位置。typedef char ElemType;
typedef struct TNode{
ElemType data; //结点数据
int parent; //该结点双亲在数组的下标
}TNode; //结点数据类型 #define MaxSize 100
typedef struct{
TNode nodes[MaxSize]; //结点数组
int n; //结点数量
}Tree; //树的双亲表示结构
链式存储结构
孩子表示法:把每个结点的孩子结点排列起来存储成1个单链表,所以n个结点有n个链表;
叶子结点链表为空;
n个单链表的头指针又存储在一个顺序表(数组)中。
孩子链表结点代码:
typedef char ElemType;
typedef struct CNode{
int child; //该孩子在表头的数组下标
struct CNode *next;//指向该结点的下一个孩子结点
}CNode,*child //孩子结点数据类型
每个孩子链表的表头结点(存在数组中):
typedef struct{
ElemType data; //结点数据域
child first child;//指向该结点的第一个孩子结点
}TNode; //孩子结点的数据类型
#define MaxSize 100
typedef struct{
TNode nodes[MaxSize];//结点数据域
int n; //树中结点数量
}Tree; //树的孩子表示结构
孩子兄弟表示法:存储孩子结点和兄弟结点。
typedef char ElemType;
typedef struct CSNode{
ElemType data; //该结点数据域
struct CSNode *firsrchild,*right;//指向该结点的第一个孩子结点和该结点的右兄弟结点
}CSNode //孩子兄弟结点数据类型
c语言数据结构学习心得——树的更多相关文章
- c语言数据结构学习心得——二叉树
二叉树 n(n>=0)个结点的有限集合:(五种形态) 1.或者为空二叉树,n=0: 2.或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成.左子树和右子树又分别是一棵二叉树. 3.每个 ...
- c语言数据结构学习心得——图
图G由顶点集V和边集E组成,记为G=(V,E) 图不可为空,一定有顶点集不为空 有向图:有向边(弧)的有限集合 无向图:无向边的有限集合 连通:顶点V到顶点V'有路径 连通分量:无向图中的极大连通子图 ...
- c语言数据结构学习心得——查找
顺序查找(线性查找) 主要用于在线性表中的查找 int Search1(int a[],int n,int key){ ;i<=n;i++){ //注意从1开始 if(a[i]==key)ret ...
- c语言数据结构学习心得——排序
排序:将无序的序列重新排列为有序的序列. 插入类排序 插入类排序:在一个有序的序列中,插入一个新的关键字,知道所有的关键字都插入形成一个有序的序列. 直接插入排序:首先以一个元素为有序的序列,然后将后 ...
- c语言数据结构学习心得——队列
队列 只允许在一端进行插入,在另一端进行删除的线性表 队头(Front):允许删除的一端(队首) 队尾(Rear):允许插入的一端 FIFO:先进先出 不要求从数组首位开始存储队列 #define M ...
- c语言数据结构学习心得——栈
栈(Stack) 只允许在一端进行插入或删除操作的线性表 栈顶(Top):栈中允许进行插入和删除操作的那一端: 栈底(Bottom):固定的,不允许进行插入或删除的另一端 1.栈是受限的线性表,所以自 ...
- c语言数据结构学习心得——线性表
线性表:具有相同数据类型的n(n>0)个数据元素的有限序列. 主要有顺序存储和链式存储. 顺序存储: 特点:地址连续,随机/存取,顺序存储. 建立:首地址/存储空间大小(数组),表长. 方式:静 ...
- c语言数据结构学习心得——数据结构基本概念
1.数据>数据元素>数据项 数据的基本单位是数据元素,数据元素的基本单位是数据项 2.运算的定义->针对逻辑结构 集合:同属于一个集合,无其他关系.(数学上的集合) 线性结 ...
- 获奖感言和C语言的学习心得
获奖感言和C语言的学习心得 自我介绍: 大家好,我的名字叫袁忠,我来自湖南,今年快19岁了,现在是大学一年级,我平时喜欢跑步.打羽毛球,我也喜欢学算法与数学,以及喜欢看一些与计算机有关的书籍,每次我学 ...
随机推荐
- jQuery使用toggle()方法进行显示隐藏
转自:https://www.cnblogs.com/sosoft/p/3460556.html 这是一个示例: 1 <html> 2 <head> 3 <script ...
- 页面中CSS的四种引入方式的介绍与比较
转自:https://blog.csdn.net/qq_38689666/article/details/79039392 一:行内式 <p style="color:red" ...
- Python 小练习二 数据库MySQL、Redis
import pymysql,redis def op_mysql(host,user,password,db,sql,port=3306,charset='utf8'): conn = pymysq ...
- 优于jdbc的mybatis框架入门
1.什么是mybatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索. MyB ...
- mysql 添加字段、删除字段、调整字段顺序
用过MySQL的朋友,可能都在使用phpMyAdmin,我从2003年开始使用,感觉那东西适合远程mysql管理,并 不适合单机.单数据库的管理操作,特别是开发使用. 给家推荐一个软件管理mysql数 ...
- 通过window.crypto.getRandomValues获得一个大于零的随机数
window.crypto.getRandomValues(new Uint32Array(1))[0]; 浏览器支持情况如下: IE: no IE Mobile: no Firefox24+ Fir ...
- AOP操作术语
- Log4j配置很详细
来自: http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记 ...
- 百度Ueditor编辑器取消多图上传对话框中的图片搜索
百度Ueditor确实是一个非常强悍的编辑器,功能强大!但是实际开发需求复杂,总会有各种不符合要求的,比如想要取消多图上传的“图片搜索”选项卡(这个图片搜索真心难用)! 以ueditor 1.4.3为 ...
- Java AOP 注解配置与xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...