数据结构
RTC_Kai
学生
展开
-
数据结构术语
计算机数据结构术语数据:指所有能输入到计算机中被处理的符号的总称。数据元素:数据的基本单位,作为一个整体进行考虑和处理,可由若干个数据项组成(例如结构体),而数据项是数据的不可分割的最小单位。(俗指:某种数据类型)数据对象:性质相同的数据元素的集合,是数据的一个子集。数据结构:数据元素相互之间存在一种或多种特定关系的数据元素的集合(例线性表的一对一,树形的一对多)。数据类型:一个值的集合...原创 2020-03-29 13:03:09 · 534 阅读 · 0 评论 -
图的遍历与最小生成树问题
图的遍历分为深度优先级遍历与广度优先级遍历。深度优先级遍历,类似于一条路走到尽,如果成功则结束,如果失败则一个个回溯会上一个顶点判断下一条未走过的路径,在进行遍历,直到成功为止,最坏打算为全部结点都遍历一遍。实现原理:利用栈模型,将已走过的结点都入栈,如果判断无路可走且未达到终点则弹栈出上一个结点判断是否有下一条路走,直到终点或者栈为空才遍历完毕。广度优先级遍历,类似于层次遍历,各个方向都...原创 2019-10-30 20:36:46 · 615 阅读 · 0 评论 -
图的建立(十字链表、邻接多重表、边集数组)
十字链表十字链表是邻接表和逆邻接表的组合,是对有向图的优化存储结构,容易求得顶点的出度和入度。除了结构复杂外,其实创建图算法的时间复杂度是和邻接表相同的,因此,在有向图的应用中,十字链表也是非常好的数据结构模型,如果我们在遍历中只关心出度则选择邻接表,反之选择逆邻接表。边表结点结构特点:tailVex、headVex、headLink、tailLinktailVex:弧起点的顶点下标hea...原创 2019-10-29 13:16:00 · 314 阅读 · 0 评论 -
图的建立(邻接表)
图建立之邻接表图的建立是需要通过传入图对应的信息才能建立的,而邻接矩阵和邻接表就是这个作用。邻接表是对邻结矩阵的改进,在邻接矩阵中才用一个一维数组记录顶点,一个二维数组记录顶点所对应的边,如果当图中每个顶点之间连线很少的情况下,同样要依次遍历二维数组中的该顶点与其他顶点的关系来确定边,导致效率低下。而邻接表则是一个结构体指针数组,该结构体又是一个链表的头结点,即这个数组中只记录了该结点已连接...原创 2019-10-29 13:14:08 · 5204 阅读 · 1 评论 -
邻接矩阵建立有/无向图的思想解析与代码实现
图的定义既然了解到图,想必都了解线性表和树形结构,他们都属于简单结构线性表:一对一关系,每个元素对应前驱和后继。树形结构:一对多关系,一个根结点对应多个孩子。名称解释:图:多对多关系,是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。图不能为空,而线性表和树可以为空表或空树。无向边:顶点与顶点之间的边没...原创 2019-10-29 01:01:14 · 1284 阅读 · 1 评论 -
哈夫曼树的思想解析与代码实现
哈夫曼树名称解释:权重:出现频率,一般用百分制表示,根节点为1。结点的路径长度:从根结点到该结点的路径上的连接数。树的路径长度:树中每个叶子结点的路径长度之和。结点带权路径长度:结点的路径长度与结点权值的乘积树的带权路径长度(MPL):树中所有叶子结点的带权路径长度之和。哈夫曼树的构建步骤从最底层开始,放置权重最小的两个结点,并且新创建一个根节点指向左右孩子两个结点,规定右孩子权...原创 2019-10-25 20:09:05 · 3274 阅读 · 0 评论 -
二叉树的线索化思想解析与代码实现
二叉树线索化思想重于代码:写程序是为了验证思想,这里讲解部分比较多,还望耐心哈!!二叉树线索化目的是想将二叉树的中序遍历不用递归方式实现,同时也充分的利用叶子结点的左右孩子空间,但是需额外引入一个标志,该标志用于判断该结点的左右孩子是线索连接的前驱后继还是直接连接左右孩子。并通过该链表将中序遍历的结点连成一条链,即遍历链表相当于二叉树的中序遍历。问题:为什么要引入线索化这个概念?1.对叶子...原创 2019-10-24 21:47:38 · 489 阅读 · 0 评论 -
树、森林、二叉树的转换
树->二叉树1.同一双亲的兄弟间连线2.对每个结点,除保留与其长子的连线外,去掉该结点与其他结点的连线生成只有左子树的二叉树森林->二叉树1.将每颗树转变为二叉树2.将各二叉树的根节点视为兄弟结点从左至右连接起来生成同时拥有左右子树的二叉树二叉树-> 树、森林1.若结点x是其双亲y的左孩子,则把x的右孩子,右孩子的右孩子…,都与y连线2.去掉所有双亲到右孩子间...原创 2019-10-24 21:05:29 · 204 阅读 · 0 评论 -
排序算法
排序稳定排序:Ri = Rj,排序前Ri 领先于 Rj,若排序后Ri 仍然领先于 Rj,则称为稳定排序非稳定排序:与稳定排序相反。内排序:待排文件在计算机的内部存储器中,其排序过程在内存中进行,速度较快,但内存容量一般很小,文件的长度(记录个数)n受到一定限制。外排序:排序中文件存入外存储器,排序过程借助于内外数据交换(或归并)来完成本文章讲述内排序,可归纳为五类:插入排序直接插...原创 2019-10-21 23:46:03 · 93 阅读 · 0 评论 -
子串查找之KMP算法
KMP算法首先先简单讲述BF算法:该算法通过子串的字符与主串的字符一个一个匹配,若序列一次性完全匹配,则返回在主串中的位置,若不匹配则子串下标重置为0,主串下标+1,可见效率低下,例如当主串为aaaaabbbbb,子串为aaaab,子串的前四个字符与主串前五个字符完全相同,到进行到下标等于5时不匹配需要将子串下标置0,主串下标0+1,依次循环重复。BF代码:int strstr(char *...原创 2019-10-21 15:47:31 · 465 阅读 · 0 评论 -
查找算法
顺序查找数组内存放无次序的数据,从头到尾或从尾到头遍历取出位置中的元素进行比较,若比较成功返回当前位置,失败即当前位置为数组头前一个位置-1或数组尾后一个LEN。时间复杂度为O(n)。折半查找数组内存放有次序的数据,通过三个数组下标low、mid、high,其中mid = (low + high) / 2。通过比较要查找的数值与array[mid]的大小,(若等于则返回mid表示当前位置,若...原创 2019-10-20 11:52:04 · 147 阅读 · 0 评论 -
顺序存储和链式存储的分析
顺序内存在初始化时已经分配好了,使用方便且高效存储空间连续可用于记录上层数据的多次变量值,也即历时数据数量限制链式存储只初始化头节点,后续节点内存需在上层进行申请和释放,使用灵活。存储空间不连续可用于记录多个变量的值,并且上层发生变化,对应节点也更新。数量不限制应用区别顺序存储一般可以用来记录同一个变量的多次数据值,每次插入时无需分配内存,对应中底层分配好的每一块...原创 2019-10-18 15:02:21 · 231 阅读 · 0 评论 -
进制转换的思路分析与计算器的实现
一、进制转换思路十进制转任意进制:求余,例如一个十进制17,求二进制(第一次)17/2 = 8 --------余数1(第二次)8/2 = 4 ---------余数0(第三次)4/2 = 2----------余数0(第四次)2/2 = 1----------余数0(第五次)1/2 = 0 ----------余数1(最高位)输出:10001 即为17对应的二进制数。将其他...原创 2019-10-16 15:03:58 · 692 阅读 · 0 评论 -
二叉树线索化(C语言)
二叉树线索化前言:二叉树线索化主要是将二叉树按遍历的顺序存放于链表中,生成一个特定顺序的链表,访问该链表相当于遍历二叉树,此操作可便于在遍历的每一次操作中,可获取当前结点前驱或后继结点的数据信息#include <stdio.h>#include <stdlib.h>#define node int//宏定义,结点中数据域的类型//枚举,Link为0,Threa...转载 2019-09-24 23:43:21 · 525 阅读 · 0 评论 -
二叉树的建立与销毁(C语言)
二叉树的建立在讲解二叉树的建立前,请读者首先要先思考一个问题前序遍历结果:ADEBCF中序遍历结果:DEACFB后序遍历结果:EDFCBA思考问题:如何确定一个二叉树,如果只看 前序 或 中序 或 后序遍历 三种之一能够确定唯一一个二叉树的形状吗?==================================================解:单凭一种遍历的结果,无法确定一个...原创 2019-09-24 16:39:48 · 5219 阅读 · 3 评论 -
二叉树的非递归遍历(C语言)
结合栈实现非递归遍历因为前序中序后序的遍历原理相同,本文章采用中序遍历进行讲解,本练习主要是加强对栈的理解,和提高运用遍历思想如下:步骤1:若当前结点有左子树,则将当前结点压入栈,指针往下走指向该节点的左子树 (相当于一直到最左下方),若无左子树了,则输出该结点。步骤2:若当前结点有右子树,则指针指向该右子树,重复步骤1。 若当前结点无右子树,则弹栈,输出栈顶元素,并让指针回...原创 2019-09-23 21:57:58 · 1686 阅读 · 0 评论 -
二叉树的简单操作框架(C语言)
实现二叉树的简单功能#include <stdio.h>#include <stdlib.h>#include <string.h>//业务结点typedef struct NODE_ST{ int value;}node_st;//二叉树模型typedef struct D_TREE{ node_st cur; struct D_TRE...原创 2019-09-23 21:13:33 · 132 阅读 · 0 评论 -
二叉树遍历(简单结构)
初步理解二叉树代码的简单框架#include <stdio.h>#include <stdlib.h>//业务结点typedef struct NODE_ST{ int value;}node_st;//树的模型,包含业务结点typedef struct D_TREE{ node_st cur; struct D_TREE *lchild,*rchil...原创 2019-09-22 20:13:09 · 1528 阅读 · 0 评论