自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 查找相关概念

查找数所在的集合称为查找表。是由同一类型的数据元素(或记录、行)构成的集合。查找表中的列称为字段或数据项。关键字是数据元素中某个数据项的值,他可以唯一标识一个数据元素(记录)。 查找就是根据给定的某个值,在查找表中确定一个关键字等于给定值的数据元素或记录的过程。通过查 找能找到该记录或这个记录中的数据项。 查找表的分类: 静态查找表:只做查找的操作的查找表 动态查找表:在查找的过程中同时进行插入或删除操作的查找表 为了提高查找的效率,需要专门设置顺序表、树等数据结构,面向查找操作的数据

2021-12-27 11:51:03 389

原创 最短路径,迪杰斯特拉算法

最短路径:两个顶点之间经过的边上的权值之和最少的路径,第一个顶点称为源点,最后一个顶点称为 终点。 迪杰斯特拉算法思路是首先从开始顶点获得所有其他顶点的距离,其中如果不是邻接的那么距离就是无 穷大。接下来从所有的距离中找到最小的距离,那么顶点到这个顶点的距离确定为最小的了(因为如果 有经过其他顶点到达这个点还有最短路径,那么他必须经过比这个距离更大的其他顶点,这就与假设冲突了)。接下来,计算通过这个新的顶点到达其他所有顶点是否还有最短路径,如果有从中再选最小的,依次类推。 ...

2021-12-27 11:47:43 254

原创 图的连通问题与最小生成树

最小生成树:构造连通网的最小代价生成树。本质就是把图中权大的边删除掉只留下n-1条边,或者说 从权最小的边开始进行保留,不构成环的边留下生成的数据结构。可以使用普利姆算法和克鲁斯卡尔算 法。 普利姆算法 取图中任意一个顶点 v 作为生成树的根,之后往生成树上添加新的顶点 w。在添加的顶点 w 和已经在 生成树上的顶点v 之间必定存在一条边,并且该边的权值在所有连通顶点 v 和 w 之间的边中取值最小。 之后继续往生成树上添加顶点,直至生成树上含有 n-1 个顶点为止。 克鲁斯卡尔算法 考

2021-12-27 11:44:45 829

原创 图的存储结构

邻接矩阵 使用两个数组来表示图,一个一维数组存储图中顶点信息,一个二维数组存储图中的边或弧的信息邻接表 用一个数组保存顶点信息,对每个顶点关联一个链表,链表内存储的是与当前顶点所关联的邻接点。十字链表 两个类型节点,顶点表节点data表示顶点值,fifirstin表示入边表头指针,指向顶点的入边表的一个节 点,fifirstout表示出边表头指针,指向出边表中第一个节点。边表节点结构,tailvex是弧起点在顶点表 的下标,headvex是弧终点在顶点表的下标,headlink是指入

2021-12-27 11:42:09 120

原创 图的定义和术语

线性表中数据之间有一个前驱和一个后继的关系,树形结构中数据之间有层次关系,且一个层中一个元 素可能和下层中多个元素相关联,但只能和上层的一个元素相关。如果认为上面的关系是一对一、一对 多的关系,那么现实生活中的图就是一种多对多的关系,图结构的元素之间的关系是任意的,图中任意 两元素之间可能都有关系。 图中的数据元素称为顶点,顶点之间的关系称为边。 图是由定点的有穷非空集合和定点之间边的集合组成,通常为G(V,E),其中G表示一个图,V是图中顶点 的集合,E是图G的边集合。 图中的一些术语

2021-12-27 11:39:42 780

原创 树和森林、 Huffman树

树和森林的转换 树转换为二叉树 加线:在所有兄弟节点之间加一条连线;去线: 对树中每一个节点,只保留它与第一个孩子节点的连 线,删除它与其他孩子节点之间的连线。层次调整:以树的根节点为轴心,将整个树顺时针旋转一定的 角度,使之结构层次分明。 森林转换为二叉树 把每棵树转换为二叉树;第一棵二叉树不动,从第二课二叉树开始,依次把后一课二叉树的根节点作为 前一棵二叉树的根节点的右孩子,用线连接起来。当所有的二叉树连接起来就得到了由森林转换来的二 叉树。 二叉树转换为树 加线:若某节点的

2021-12-25 15:41:34 697

原创 二叉树的遍历的应用

统计二叉树中叶子结点的个数 算法基本思想:先序(或中序或后序)遍历二叉树,在遍历过程中查找叶子结点,并计数。由此,需在遍 历算法中增添一个“计数”的参数,并将算法中“访问结点”的操作改为:若是叶子,则计数器增1。 求二叉树深度 算法基本思想:首先分析二叉树的深度和它的左、右子树深度之间的关系。从二叉树深度的定义可知, 二叉树的深度应为其左、右子树深度的最大值加1。由此,需先分别求得左、右子树的深度,算法中“访 问结点”的操作为:求得左、右子树深度的最大值,然后加 1 。复制二

2021-12-25 15:39:05 610

原创 二叉树定义及性质

二叉树是一种常见的树结构。二叉树是每个节点至多只有2课子树,子树有左右之分的有序树。 二叉树可能的形态为以下几种: 二叉树的性质 可以对满二叉树的节点进行连续编号,约定编号从根节点开始,自上而下、从左到右。 完全二叉树:深度为k有n个节点的二叉树,当且仅当每个节点都与深度为k的满二叉树中编号从1至n的 节点一一对应时,称为完全二叉树。二叉树的遍历 二叉树的遍历是指从根节点出发,按照某种次序依次访问二叉树中所有节点,使得每个节点被访问一次 且仅被访问一次。不像线性结构,树..

2021-12-25 15:37:33 407

原创 树的存储结构

双亲表示法:在每个节点中,附设一个指示器指示其双亲节点到链表中的位置。如下所示,data 是数据区域,存储节点的数据信息,parent是指针域,存储该节点的双亲在数组中的下标。 这种存储结构的缺点是,根据parent指针可以很容易的找到双亲节点,但想知道节点的孩子有哪些,需 要遍历整个数据结构才可以。 孩子表示法:树结构中可能有多个不确定的孩子,所以用静态结构存储孩子的位置不合适,可以采 用链表的方法存储孩子节点的位置。 孩子兄弟表示法:一棵树的第一个孩子如果存在就是唯一的,他的..

2021-12-25 15:35:23 371

原创 常用树操作术语

树的节点:包含一个数据元素及若干指向其它子树的分支。节点的度:节点拥有的子树个数。叶子节点(终端节点):度为0的节点分支节点(非终端节点):度不为0的节点树的度:树内各节点的度的最大值孩子、双亲:节点的子树的根称为该节点的孩子,相应该节点称为双亲。兄弟:同一个双亲的孩子之间互称兄弟子孙:某节点为跟的子树中的任意节点都成为该节点的子孙。祖先:从根到该节点所经分支上的所有节点。层次:从根开始定义起,根为第一层,根的孩子为第二层。深度(高度):树中最大层次称为深度或高度。.

2021-11-27 19:58:31 283

原创 树的定义及基本术语

树是以分支关系定义的层次结构。树是n个节点的有限集。一颗非空树中,有且只有一个特定的称为根 的节点,其余节点可分为m个不相交的有限集,并且每个集合本身又是一颗树(称为子树)。这是一种 递归定义的方法。树的ADT定义ADT Tree{ 数据对象D:D是具有相同特性的数据元素的集合 数据关系R:若D为空集,则称为空树;若D中仅含有一个数据元素,则R为空集,否则R={H},H 是如下二元关系:(1)在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;(2)若 ,则存在D-{root}的一个划分.

2021-11-27 19:56:48 257

原创 广义表的介绍

广义表是线性表的推广。 广义表一般记为 其中,LS是广义表的名称,在广义表定义中, 可以是单个元 素,也可以是广义表。显然广义表是一个递归定义结构定义的。 当广义表LS非空时,称第一个元素 为LS的表头,其余元素组成的表 是LS的表尾。广义表的存储结构 因为广义表的数据元素既可以是原子元素也可以是列表,因此难以用顺序存储结构表示,通常采用链式 存储结构。每个数据元素可以用一个节点表示。用这个存储结构表示上面几个例子中的广义表为 广义表的结构是一种嵌套的结构,所以它的多个操作都可以用递归函数实现。

2021-11-16 20:59:06 689

原创 数组、矩阵的压缩存储

二维数组可以看成是一个定长线性表,它的每一个数据元素也是一个定长线性表。一个二维数组m行n 列的矩阵形式表示,他可以表示成一个线性表 ,其中每个数据元素 是一个列向 量形式的线性表 。n维数组也可以看成是线性表的推广。数组一般不作插入和删除操作,作为一种纯存储数据的容器,只支持做赋值和取值操作。而且数组一旦 创建,数据元素个数和元素之间的关系就不在产生变动,可以根据数组下标求得响应数组元素的存储位 置。矩阵通常使用数组进行存储,但是在实际中可能使用比较大的矩阵,而且矩阵具有一定的规律性 特殊矩阵:.

2021-11-16 20:56:16 586

原创 串的存储表示和实现

◆ 定长顺序存储表示:将串定义成字符数组,利用串名可以直接访问 串值。用这种表示方式,串的存储空间在编译时确定,其大小不能改变。 ◆ 堆分配存储方式:仍然用一组地址连续的存储单元来依次存储串中的字 符序列,但串的存储空间是在程序运行时根据串的实际长度动态分配的。 ◆ 块链存储方式:是一种链式存储结构表示。串的定长顺序存储表串的堆分配存储表示 实现方法:系统提供一个空间足够大且地址连续的存储空间(称为“堆”) 供串使用。可使用C语言的动态存储分配函数malloc()和free()来管理。串的链式.

2021-11-03 20:22:19 394

原创 串的基本概念

串(字符串):是零个或多个字符组成的有限序列。记作: S=“a1a2a3…”,其中S是串名,ai(1≦i≦n)是单个,可以是字母、数字或其它 字符。 串值:双引号括起来的字符序列是串值。 串长:串中所包含的字符 个数称为该串的长度。 空串(空的字符串):长度为零的串称为空串,它不 包含任何字符。 空子串(substring):串中任意个连续字符组成的子序列称 为该串的子串,包含子串的串相应地称为主串。 子串的序号:将子串在主 串中首次出现时的该子串的首字符对应在主串中的序号,称为子串在主串 中的序号(或位.

2021-11-03 20:18:32 1332

原创 队列及其基本概念

1 队列的基本概念 队列(Queue):也是运算受限的线性表。是一种先进先出(First In First Out ,简称FIFO)的线性表。只允许在表的一端进行插入,而在另一端进行 删除。 队首(front) :允许进行删除的一端称为队首。 队尾(rear) :允许进 行插入的一端称为队尾。2 队列的抽象数据类型定义 ADT Queue{ 数据对象:D ={ ai|ai∈ElemSet, i=1, 2, …, n, n >= 0 数据关系:R = { | ai-1, ai∈D, i=2,3,…,

2021-10-26 21:57:08 736

原创 栈的的链表实现

栈的链表实现栈的链式实现可采用与改进的线性表一样有两个指针。分别指向栈底 头节点base和栈顶top节点。保留栈内元素个数变量length。使用常规链接 方法建立的链表,在压栈操作时是O(1)速度,但是弹栈操作要 找到top的前驱节点,所以速度是O(n),为了加快弹栈速度可以采用,下图 右边所示存储方案,可以把链表反向链接,这样就可以提高弹栈的速度 了,并且其他性能不变。栈应用实例进制转换 进制转换是计算机中常用的一种操作,如果将10进制数转换为N进制 的数(保证N小于10)我们常采用除N取余法

2021-10-23 20:33:24 313

原创 栈的基本概念

栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为 后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性 表。栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指 针(top)来指示栈顶元素。栈底(Bottom):是固定端,又称为表头。空 栈:当表中没有元素时称为空栈。栈的抽象数据类型定义 ADT Stack{ 数据对象:D ={ ai|ai∈ElemSet, i=1,2,…,n,n≥0 }

2021-10-23 20:29:51 1379

原创 建立单链表

从一个空表开始,重复读入数据,生成新结点,将读入数据存放到新 结点的数据域中,然后将新结点插入到当前链表的表头上,直到读入结束 标志为止。即每次插入的结点都作为链表的第一个结点。⑴ 头插入法建表 头插法建表:将新结点插入到当前链表的表头 优点:算法简单 缺点: 链表中结点次序和输入次序相反(2)尾插法建表:将新结点插入到当前链表的表尾(需引入r) 不带头结点的尾插法:插入时,第一个结点的处理与其它结点的处理 有区别。结束时,空表和非空表的处理有区别。 带头结点的尾插法:1) 链表第一个位置上的操作.

2021-10-22 21:16:48 147

原创 线性表的链式存储结构

1、链式存储:用一组任意的存储单元存储线性表, 逻辑上相邻的结点 在物理位置上不一定相邻,结点间的逻辑关系由存储结点时附加的指针字 段表示2、链表:采用链式存储方法的线性表称为链表。3、每一个结只包含一个指针域的链表,称为单链表 为了正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须 存储指示其直接后继结点的地址(或位置),称为指针(pointer)或链(link), 这两部分组成了链表中的结点结构 链表结点结构 data :数据域,存放结点的值。next :指针域,存放结点的直接后 继的地.

2021-10-22 21:15:23 1855

原创 线性表的概念及运算

线性表内存储的元素是同一种数据类型的数据对象,相邻数据元素之 间存在顺序关系。由这样特点的数据特征元素相同的元素构成的有限序列 成为线性表。线性表的定义(逻辑结构) 线性表(Linear List) :是由n(n≧0)个数据元素(结点)a1,a2, …an组 成的有限序列。该序列中的所有结点具有相同的数据类型。其中数据元素 的个数n称为线性表的长度。 当n=0时,称为空表。 当n>0时,将非空的线性表记作: (a1,a2,… an)注意: 1.数据元素ai是一个抽象的符号2. ai可取各种

2021-10-21 21:15:44 316

原创 数据结构数学基础

1. 指数 指数是幂运算aⁿ(a≠0)中的一个参数,a为底数,n为指数,指数位于底 数的右上角,幂运算表示指数个底数相乘。 如43=444 一些基本的公式2. 对数 在数学中,对数是对求幂的逆运算,正如除法是乘法的倒数,反之亦 然。因此,对于公式,有且仅当 一些基本的公式3. 级数 级数是指将数列的项依次用加号连接起来的函数。我们使用∑(希腊 语:Sigma,汉语:西格玛)符号进行表示,如 级数理论是分析学的一个分支;它与另一个分支微积分学一起作为基 础知识和工具出现在其余各分支中。二者共同以极限为

2021-10-21 21:13:43 413

原创 数据结构算法(二)

算法的时间复杂度 指运行算法所需的时间-----该算法中每条语句的执行时间之和。算法时间复杂度记为O(f(n)),它表示随着问题规模n的增大,算法执 行时间的增长率和f(n)的增长率相同,称作算法的渐进复杂度,简称时间复 杂度。其中f(n)是问题规模n的某个函数。 O(1) :常量时间阶 O (n):线性时间阶 O(㏒n) :对数时间阶 O(n㏒n) :线性对数时间阶空间复杂度 是指算法编写成程序后,在计算机中运行时所需存储空间大小的度 量。 记作: S(n)=O(f(n)) 其中: n为问题的规.

2021-10-20 19:24:55 42

原创 数据结构算法

算法(Algorithm):是对特定问题求解方法(步骤)的一种描述,是指令 的有限序列,其中每一条指令表示一个或多个操作。 #include int main() { int ans=0,i; for(i=1;i int main() { int ans=(1+100)*100/2; printf("%d",ans); return 0; }算法特性: ① 有穷性: 一个算法必须总是在执行有穷步之后结束,且每一步都在 有穷时间内完成。 ② 确定性:算法中每一条指令必须有确切的含义。不存 在二义性。且算法

2021-10-20 19:23:23 54

原创 数据常用结构

1.数组:在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。2.栈:是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来

2021-10-19 19:18:07 153

原创 数据结构基础

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。...

2021-10-19 19:11:50 41

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除