数据结构与算法总结(3)

                        数据结构与算法总结(3)
开发工具与关键技术:数据结构与算法
作者:昨夜星辰
撰写时间:2020年 05月 18日

一、数的概念:
1.树的定义:树是由n(n>0)个节点组成的有限集合T,如果n=0,称为空树;如果n>0,则满足有一个定称之为根的节点,它只有直接后继,但没有直接前驱;每棵子树的跟结点有且仅有一个直接前驱,单可以有个或多个直接后继。
2.树的基本术语:
1.节点(node)包括一个数据元素及若干个指向其子树的分支。
2.节点的度(degree)节点的子树的个数。
3.树的度(degree)树中节点度的最大值。
4.叶子(leaf)度为零的节点。
5.分支(branch)度不为零的节点。
6.孩子(child)某节点的各子根的根。
7.双亲(parent)该节点的直接前驱节点。
8.兄弟(sibling)具有相同双亲的节点。
9.有序树和无序树:如果树中每个节点的各个子树是从左到右有次序
10.森林:m(m>=0)根互不相交的树的有限集合。
11.树的深度:树中所有结点的最大层数,也称高度。
二、二叉数的概念:二叉树是规定每个节点至多只有两个孩子数,正好符合我们国家现在的二胎政策条件。
二叉树是最简单的树形结构,所有的一般树都可以转化为二叉树,抓安环后的二叉树也能按一定规则还原为一般树,所以掌握二叉树尤其重要。
二叉树的定义:二叉树是树形结构中一种最典型、最常用的结构,处理起来比一般树简单,而且树也很容易地转换成二叉树。二叉树是n(n>0)个结点的有限集合BT,它或者是空集,或者由一个根结点和两颗分别称为左子树和右子树的互不相交的二叉树组成。其特点是每个节点至多有两颗子树,二叉树的子树有左,右之分,且其次序不能任意颠倒。
二叉树的基本操作:1.初始化:将二叉树BT初始化为一棵空树。
2.判断二叉树是否为空:判断一棵树BT是否为空,若为空,返回真,否则返回假
3.求根结点:返回树BT的根结点。
4.求双亲结点:返回二叉树BT中x双亲结点,如果x为根结点,则返回空。
5.求二叉树的高度:返回二叉树BT的高度。
6.求结点的左孩子:返回二叉树BT中结点x的左孩子结点,若结点为叶子结点或x不在二叉树BT中,则返回值为“空”。
7.求结点的右孩子:返回二叉树BT中结点x的右孩子结点,若结点为叶子结点或x不在二叉树BT中,则返回值为“空”。
8.遍历二叉树:从根结点开始,按照一定的次序访问二叉树BT中所有的结点
二叉树的存储:二叉树分别有两种存储结构;(1).顺序存储结构。(2)链式存储结构
顺序存储结构:二叉树的顺序存储结构就是用一堆数组存储二叉树的数据元素,数组的下标要能体 现结点之间的逻辑关系,包括双亲与孩子的关系,左右兄弟的关系等。具体做法是将完全二叉树上的编号为i的结点元素存储在一堆数组下标为i的元素中,二叉树及其顺序存储结构
链式存储结构:二叉树的顺序存储结构比较浪费存储空间,可以考虑链式存储结构。二叉树每个结点最多有两个孩子,所以为它设计一个数据域和两个指针域,这样的链表叫做二叉链表,二叉链表结点:有三个域:一个数据域,两个分别指向左右子结点的指针域。
三叉链表结点:除二叉链表的三个域外,在增加一个指针域,用来指向结点的父结点。
遍历二叉树:以某种次序访问二叉树中的每个结点,且每个结点仅被访问一次,
二叉树遍历方法有:先根遍历,中根遍历、后根遍历、层次遍历。
三、哈夫曼树的基本概念: 哈夫曼树(最优二叉树):具有n个叶子结点的二叉树不止一颗。但在所有的这些二叉树中,必定存在一颗WPL值最小的树,称为哈夫曼树(最优树)。
1、路径长度:两个结点之间的路径长度是相连两结点的路径上的分支数。
2、树的路径长度:根结点到个结点的路径长度之和。
3、特点:哈夫曼树中没有度为1的结点。
4、构造哈夫曼树的过程:合并两颗选出的二叉树,增加一个新结点作为新二叉树的根,权值为左右孩子的权值之和。在森林中选出两颗根结点的权值最小的二叉树,根据给定的n个权值(W1,W2,….Wn)构成n颗二叉树的集合F(T1,T2……Tn),其中每一颗二叉树Ti中只有一个带权为Wi的根结点,其左右子树为空。重复以下步骤,直到F中仅剩下啊一棵树为止:1、在F中选出两颗根结点权值最小的树作为一颗新的二叉树的左右树,且置新二叉树根结点的权值为两颗子树根结点的权值之和.
2、在F中删除这两颗二叉树。
四、图的基本概念和定义:图结构是一种比树形结构更复杂的非线性结构,任意一个结点都可以有任意多个前驱和后继。图结构是一种重要的数据结构,它在计算机领域有着广泛的应用,除此之外,图结构经常用于地理城市交通以及项目规划和一些社会科学领域。
1、图结构的技能目标:会用图的模型找到现实的例子,理解图的相关概念。会用领接矩阵存储图。会用邻接表存储图。掌握图的两种遍历方式。能写出查找最小路径的算 法。能画出拓扑序列图。
2、图的存储结构:图的存储结构比线性表和树来说更为复杂,既存储所有顶点的信息,又要存储顶点与顶点之间的所有关系,也就是边的信息,我们常说的顶点位置或邻接点的位置只是一个相对的概念,图上任何一个顶点都可以看做初始顶点,任一项的邻接点之间不存在次序的关系。
3、邻接矩阵的概念:邻接矩阵这种存储结构采用连个数组来表示图,一个是一维数组,存储图中的所有顶点的信息,另一个是二维数组,即邻接矩阵,存储顶点之间的关系。邻接矩阵是对称方阵。

  4、建立图的邻接矩阵:以建立无向图的邻接矩阵的算法为例进行讨论,首先输入顶点个数、边的条数,由顶点的序号建立顶点表(数组)。然后将矩阵的每个元素都初始化为0,读入边(i,j),将邻接矩阵的相应元素的值(第i行和第j列和第j行第i列)置为1.
 5、邻接表:邻接矩阵是一种比较简单的图存储结构,但是对于边数相对顶点较少的图,就有可能

产生稀疏矩阵,是很浪费存储空间的,因此可以考虑链式存储的方式,结合树的孩子
表示法,将数组与链表相结合的存储方法称为邻接表。
五、图的遍历:从图中某一顶点出发遍历图中其余顶点,且使每一顶点仅被访问一次。
1、算法设计需要考虑三个问题:
1、 算法的参数要指定访问的第一顶点;
2、 要考虑遍历路径可能出现的死循环问题;
3、 要使一个顶点的所有邻接顶点按照某种次序被访问。
2、图的遍历有两种基本方法:深度优先搜索DFS;广度优先搜索BFS。
3、图的任一顶点都可能和其余顶点相邻接,且可能存在回路,因此在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点,为了避免重复访问,可设置一个标志顶点是否被访问过的辅助数组visted[],它的初始状态为0,在图的遍历过程中,一旦某一个顶点v1被访问,就立即visted[i],置为1,防止它被多次访问。
4、图的深度优先遍历:图的深度优先遍历是基于图的邻接矩阵实现的,是要源点确定,DFS序列唯一。类似于树的先序遍历;是一个递归的过程;遍历时,对图的每个结点至多调用一次DFS函数。实质就是对每个顶点查找邻接顶点的过程,取决于存储结构。
六、查找的类型和概念:
1、静态查找:静态查找是指在静态查找表上进行查找操作,查找满足条件的数据元素的存储位置或各种属性。查找方法:顺序查找,折半查找,分块检索
2、顺序查找:查找表的存储结构是线性表(顺序表或链表),查找过程是依次查找条件中的数据元素的关键字值进行比较。
3、折半查找:折半查找只适用于对有序顺序表进行查找。每进行一次折半查找,要么查找成功,要么查找结束,要么将查找范围缩小一半,如此重复。二分查找算法平均查找长度为log2n,比较次数少,查找速度快,只能应用于有序的顺序表,二分查找适用于那种一经建立就很少改动,而又经常需要查找的顺序表。
4、动态查找:表结构本身是在查找中动态生成,对于给定值K,如表中存在,则查找成功;否则在适当的位置插入K,动态查找的结构主要有二叉树结构和树结构两种类型。
4(1)二叉排序树:或者是空树,或者是满足一下性质的二叉树。若左子树不为空,则左子树上所有结点的值(关键字)都小于根结点的值;若右子树不为空,则右子树上所有结点的值(关键字)都大于根结点的值。用给定值K与根结点的关键字比较,如果K小于根结点的值,就继续在左子树查找,否则将继续在右子树中查找,以此方法,一直查找下去,直至查找成功或查找失败为止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值