- 博客(60)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 win10+阿里云ECS服务器+hexo搭建个人博客
最近尝试了Hexo+github来配置属于自己的博客,但是访问速度有些慢。在网上看到一些教程,基于网上教程总结了这一篇《win10+阿里云ECS服务器+hexo搭建个人博客》。原文来自: 公众号:阿汤笔记 (我只是个工具人) 向大佬学习。为什么会选择他的教程呢?这是我自己动手做过之后,没出多少错的教程,所以推荐给大家,有兴趣的可以尝试一下。一、搭建个人博客的多种选择目前,主流的博客主...
2020-05-05 22:26:49
1068
原创 8.6总结与提高
8.6总结与提高一、主要知识点1. 查找表的检索机制查找表是由同一类型元素构成的集合。本章给出了三种类型的查找表:第一类主要基于线性结构,记录关键字一般按序排列,以提高检索速度,主要采用基于比较的顺序检索或折半检索方法。由于这一类查找表主要用于查找,一般不对表做插入和删除操作,通常称为静态查找表。第二类主要基于树形结构,包括二叉树和 m 叉树,主要采用基于比较的分支检索方法,即从树根开始,根据比较结果,沿着特定的分支进行检索,其检索的时间复杂度与树的深度同级别为对数函数。由于这一类查找表不仅用
2020-11-21 22:36:10
801
原创 8.5计算式查找(哈希查找及性能分析)
8.5计算式查找(哈希查找及性能分析)一、哈希表的查找过程哈希表的查找过程与哈希表的创建过程是一致的。假设要查找关键字为 K 的元素,则查找过程如下:[算法思想]:(1) 首先计算 h0= hash(K);(2) 如果单元 h0为空,则所查元素不存在;(3) 如果单元 h0中元素的关键字为 K,则找到所查元素;(4) 否则重复下述解决冲突的过程:a. 按解决冲突的方法,找出下一个哈希地址 hi ;b. 如果单元 hi为空,则所查元素不存在;c. 如果单元 hi中元素的关键字为 K,则
2020-11-21 22:25:58
2187
原创 8.4 计算式查找(哈希表的构造)
8.4 计算式查找(哈希表的构造)哈希法又称散列法、杂凑法或关键字地址计算法等,相应的表称为哈希表、散列表、杂凑表等。这种方法的基本思想是:首先在元素的关键字 k 和元素的存储位置 p 之间建立一个对应关系 H,使得 p=H (k),H 称为哈希函数。创建哈希表时,把关键字为 k 的元素直接存入地址为 H (k)的单元;以后当查找关键字为 k 的元素时,再利用哈希函数计算出该元素的存储位置 p=H (k),从而达到按关键字直接存取元素的目的。当关键字集合很大时,关键字值不同的元素可能会映象到哈希表的同
2020-11-21 22:17:26
919
原创 8.3基于树表的查找
8.3基于树表的查找基于树的查找法是将待查表组织成特定树的形式并在树结构上实现查找的方法,故又称为树表式查找法,主要包括二叉排序树、平衡二叉树和 B_树等。一、 二叉排序树1、 二叉排序树定义与描述二叉排序树又称为二叉查找树,它是一种特殊的二叉树。其定义为:二叉树排序树或者是一棵空树,或者是具有如下性质的二叉树:(1)若它的左子树非空,则左子树上所有结点的值均小于根结点的值;(2)若它的右子树非空,则右子树上所有结点的值均大于(或大于等于)根结点的值;(3)它的左右子树也分别为二叉排序树。
2020-11-21 22:07:03
454
原创 8.2基于线性表的查找法
8.2基于线性表的查找法基于线性表的查找法具体可分为顺序查找法、折半查找法以及分块查找法。一、顺序查找法顺序查找法的特点是,用所给关键字与线性表中各元素的关键字逐个比较,直到成功或失败。存储结构通常为顺序结构,也可为链式结构。顺序结构数据类型的定义:#define LIST_SIZE 20typedef struct { KeyType key; OtherType other_data;}RecordType;typedef struct { RecordType r[LIST_SI
2020-11-21 21:45:36
765
原创 8.1查找的基本概念与方法
8.1查找的基本概念一、查找有关的基本概念列表:由同一类型的数据元素(或记录)构成的集合,可利用任意数据结构实现。关键字:数据元素的某个数据项的值,用它可以标识列表中的一个或一组数据元素。如果一个关键字可以惟一标识列表中的一个数据元素,则称其为主关键字,否则为次关键字。当数据元素仅有一个数据项时,数据元素的值就是关键字。查找:根据给定的关键字值,在特定的列表中确定一个其关键字与给定值相同的数据元素,并返回该数据元素在列表中的位置。若找到相应的数据元素,则称查找是成功的,否则称查找是失败的,此时应返回
2020-11-21 21:31:44
426
原创 7.8总结与提高
7.8总结与提高【主要知识点】(1)基本概念:图中顶点间的关系可以任意的,因此图是最复杂的非线性结构,它的表达力强。图具有有向图、无向图、连通图、强连通图、完全图、赋权图等多种类型。(2)图的存储结构:图的存储方式一般有两类,用边的集合方式有邻接矩阵,链接方式有邻接表、 十字链表、邻接多重表。邻接矩阵和邻接表是两种常用的存储结构,适用于有向图(网)和无向图(网) 表示与处理。(3)图的基本操作:由于图中结点间可以是多对多的关系,为实现图的遍历必须设置访问标志数 组,以防止走回路或未访问到
2020-10-14 22:32:26
445
原创 7.7最短路径
7.7最短路径【最短路径问题】 如果将交通网络画成带权图,结点代表地点,边代表城镇间的路,边权表示路的长度, 则经常会遇到如下问题:两给定地点间是否有通路?如果有多条通路,哪条路最短?还可以 根据实际情况给各个边赋以不同含义的值。例如,对司机来说,里程和速度是他们最感兴趣 的信息;而对于旅客来说,可能更关心交通费用。有时,还需要考虑交通图的有向性,如航行时,顺水和逆水的情况。带权图的最短路径是指两点间的路径中边权和最小的路径。1. 求某一顶点到其它各顶点的最短路径设有带权的有向图 D=(V,{
2020-10-14 22:32:15
3425
原创 7.6有向无环图应用之关键路径
7.6有向无环图应用之关键路径关键路径有向图在工程计划和经营管理中有着广泛的应用。通常用有向图来表示工程 计划时有两种方法:(1)用顶点表示活动,用有向弧表示活动间的优先关系,即上节所讨论的 AOV 网。(2)用顶点表示事件,用弧表示活动,弧的权值表示活动所需要的时间。把用第二种方法构造的有向无环图叫做边表示活动的网(Activity On Edge Network),简称 AOE-网AOE-网在工程计划和管理中很有用。在研究实际问题时,人们通常关心的是:哪些活动是影响工程进度的关键活动
2020-10-14 22:31:57
860
原创 7.5有向无环图应用之拓扑排序
7.5有向无环图应用之拓扑排序有向无环图(Directed Acyclic Graph)是指一个无环的有向图,简称 DAG。有 向无环图可用来描述工程或系统的进行过程,如一个工程的施工图、学生课程间的制约关系图等。拓扑排序用顶点表示活动,用弧表示活动间的优先关系的有向无环图,称为顶点表示 活动的网(Activity On Vertex Network), 简称为 AOV-网。例如:计算机系学生的一些必修课程及其先修课程的关系如下:用顶点表示课程,弧表示先决条件,则上述关系可用一个有向无环图表示,
2020-10-14 22:31:46
987
原创 7.4图的连通性
7.4图的连通性1. 无向图的连通分量在对图遍历时,对于连通图,无论是广度优先搜索还是深度优先搜索,仅需要调用一次搜索过程,即从任一个顶点出发,便可以遍历图中的各个顶点。对于非连通图,则需要多次调用搜索过程,而每次调用得到的顶点访问序列恰为各连通分 量中的顶点集。例如,下图(a)是一个非连通图,按照它的邻接表进行深度优先搜 索遍历,三次调用 DepthFirstSearch 过程得到的访问顶点序列为:可以利用图的遍历过程来判断一个图是否连通。如果在遍历的过程中,不止一次调用搜索过程,则说明该图就是一
2020-10-14 22:31:34
600
原创 7.3图的遍历
7.3图的遍历图的遍历就是从图中的某个顶点出发,按某种方法对图中的所有顶点访问且 仅访问一次。图的遍历比起树的遍历要复杂得多。由于图中顶点关系是任意的,即图中顶点之间是多对多的关系,图可能是非连通图,图中还可能有回路存在,因此在访问了 某个顶点后,可能沿着某条路径搜索后又回到该顶点上。为了保证图中的各顶点 在遍历过程中访问且仅访问一次,需要为每个顶点设一个访问标志,因此要为图设置一个访问标志数组 visited[n],用于标示图中每个顶点是否被访问过,它的初 始值为 0(假),一旦顶点 vi访问过,则置
2020-10-14 22:31:22
492
原创 7.2图的存储结构
7.2图的存储结构本讲介绍 4 种较常用的存储表示法:①邻接矩阵表示法;②邻接表;③邻接 多重表;④十字链表。由于每种方法各有利弊,因此可以根据实际应用问题来选择合适的存储表示方法。①邻接矩阵表示法图的邻接矩阵表示法(Adjacency Matrix)也称作数组表示法。它采用两个数 组来表示图:一个是用于存储顶点信息的一维数组,另一个是用于存储图中顶点 之间关联关系的二维数组,这个关联关系数组被称为邻接矩阵。若 G 是一具有 n 个顶点的无权图,G 的邻接矩阵是具有如下性质的 n×n 矩 阵 A:
2020-10-14 22:31:09
2946
原创 7.1图的基本概念
7.1图的基本概念一、图的定义图(Graph)是一种网状数据结构,其形式化定义如下:Graph=(V,R) V={x∣x∈DataObject} R={VR} VR={<x,y>∣P(x,y)∧(x,y∈V)} DataObject为一个集合,该集合中的所有元素具有相同的特性。V 中的数据元素通常称为顶点(vertex), VR 是两个顶点之间的关系的集合。P(x,y)表示 x 和 y 之间有特定的关联属性 P。若<x,y>∈VR,则<x,y>表示从
2020-10-14 22:30:55
367
原创 6.11总结与提高
6.11总结与提高一、主要知识点(1)理解定义:本章介绍的一般树与二叉树均为树结构,树结构是最重要的非线性结构。 注意树结构与线性结构的差别:在线性结构中前驱结点是惟一的,而树结构中结点的前驱只 有一个(除根结点无前驱外),后继个数可有 m(m≥0)个,其中二叉树是后继个数最多为 2 的树。(2)存储结构:①二叉树采用顺序存储与二叉链表存储,其孩子个数最大为 2,故采用二叉树的二叉链 表表示法实现存储。②对一般树,由于结点的后继个数变化范围较大,常采用树的二叉链表表示法实现存储 (即孩子兄弟法);
2020-07-03 10:28:13
201
原创 6.10哈夫曼编码与构造
6.10哈夫曼编码与构造哈夫曼编码由于哈夫曼树是具有相同叶子个数的二叉树中带权路径长度最小的二叉树,涉及求根据给定叶子(带权)求其“规模最小”的二叉树问题,用哈夫曼树构造哈夫曼编码就是其典型应用。1.哈夫曼编码的概念用电子方式处理符号时,需先对符号进行二进制编码。例如,在计算机中使用的英文字 符的 ASCII 编码就是 8 位二进制编码,ASCII 编码是一种定长编码,即每个字符用相同数目的二进制位编码。为了缩短数据文件(报文)长度,可采用不定长编码。其基本思想是,给使用频度较高 的字符编以较短的
2020-07-03 10:28:02
1587
原创 6.9哈夫曼树及其构造
6.9哈夫曼树及其构造哈夫曼树可用来构造最优编码,用于信息传输、数据压缩等方面,哈夫曼树是一种应用广泛的二叉树一、 哈夫曼树1.哈夫曼树的基本概念在介绍哈夫曼树之前,先给出几个基本概念。结点间的路径和路径长度:路径是指从一个结点到另一个结点之间的分支序列,路径长度是指从一个结点到另一个 结点所经过的分支数目。结点的权和带权路径长度 :在实际的应用中,人们常常给树的每个结点赋予一个具有某种实际意义的实数,称该实数为这个结点的权。在树型结构中,把从树根到某一结点的路径长度与该结点的权 的乘积,叫做
2020-07-03 10:27:51
4297
原创 6.8树、森林和二叉树的关系
6.8树、森林和二叉树的关系一、 树的存储结构树的主要存储方法有以下三种:1.双亲表示法这种方法用一组连续的空间来存储树中的结点,在保存每个结点的同时附设一个指示器来指示其双亲结点在表中的位置,其结点的结构如下图所示:整棵树用含有 MAX 个上述结点的一维数组来表示,如下图所示。这种存储法利用了树中每个结点(根结点除外)只有一 个双亲结点的性质,使得查找某个结点的双亲结点非常容易。 反复使用求双亲结点的操作,也可以较容易地找到树根。但是,在这种存储结构中,求某个结点的孩子时需要遍历整个数组。
2020-07-03 10:27:39
730
1
原创 6.7由遍历序列确定的二叉树
6.7由遍历序列确定的二叉树在二叉树的遍历中,我们知道,给定一棵二叉树和一种遍历方法,就可以确定该二叉树相应的线性序列。那么,根据给定的遍历序列能否唯一的确定一棵二叉树呢?显然,只由一种序列是无法确定二叉树的,要根据遍历序列确定二叉树,至少需要知道该二叉树的两种遍历序列。表 6-1 列出了两种遍历序列组合确定二叉树的情况。例已知一棵二叉树的先序序列与中序序列分别为:A B C D E F G H IB C A E D G H F I试构造该二叉树。分析:根据定义,二叉树的先序遍历是先访问根
2020-07-03 10:27:28
396
原创 6.6线索二叉树
5.6线索二叉树二叉树的遍历运算是将二叉树中结点按一定规律线性化的过程。当以二叉链表作为存储结构时,只能找到结点的左、右孩子信息,而不能直接得到结点在遍历序列中的前驱和后继 信息。要得到这些信息可采用以下两种方法:第一种方法是将二叉树遍历一遍,在遍历过程 中便可得到结点的前驱和后继,但这种动态访问浪费时间;第二种方法是充分利用二叉链表 中的空链域,将遍历过程中结点的前驱、后继信息保存下来。下面重点讨论第二种方法。我们知道,在有 n 个结点的二叉链表中共有 2n 个链域,但只有 n-1 个有用的非空链域,
2020-07-03 10:27:13
367
原创 6.5二叉树遍历算法基于栈的递归消除
6.5二叉树遍历算法基于栈的递归消除二叉树的遍历问题递归的问题无法直接转换成循环,所以需要采用工作栈消 除递归。工作栈提供一种控制结构,当递归算法进层时需要将信息保留;当递归算法出层时需要从栈区退出上层信息。1.中序遍历二叉树的非递归算法首先应用递归进层三件事与递归退层三件事的原则,直接先给出中序遍历二 叉树的非递归算法基本实现思路【算法思想】(1) 针对左递归,写出递归进层的三件事。(2) 接着写出左递归返回时应执行的语句:访问根结点。(3) 接着针对右递归,写出递归进层的三件事。(4)
2020-07-03 10:26:58
472
原创 6.4遍历算法应用
6.4遍历算法应用二叉树的遍历运算是一个重要的基础。一是重点理解访问根结点操作的含义,二 是注意对具体的实现时是否需要考虑遍历的次序选择要求1.输出二叉树中的结点【算法思想】输出二叉树中的结点并无次序要求,因此可用三种遍历算法中的任何一种 完成,只需将访问操作具体变为输出操作即可。下面给出采用先序遍历实现的算法。【算法描述】/* 先序遍历输出二叉树结点, root 为指向二叉树根结点的指针 */ { if (root!=NULL) { printf (root ->da
2020-07-03 10:26:47
677
原创 6.3二叉树的遍历
6.3二叉树的遍历二叉树的遍历是指按一定规律对二叉树中的每个结点进行访问且仅访问一次。二叉树 是非线性数据结构,遍历操作就是将二叉树中结点按一定规律线性化的操作,目的在于将非 线性化结构变成线性化的访问序列。二叉树的遍历操作是二叉树中最基本的运算。一、二叉树遍历的定义二叉树的遍历是指按一定规律对二叉树中的每个结点进行访问且仅访问一次。其中的访问可指计算二叉树中结点的数据信息,打印该结点的信息,也包括对结点进行任何其他操作。为什么需要遍历二叉树?二叉树是非线性数据结构,通过遍历可以将二叉树中的结点访问
2020-07-03 10:26:34
933
原创 6.2二叉树的定义
6.2二叉树一、二叉树的定义与基本操作定义:把满足以下两个条件的树型结构叫做二叉树(Binary Tree):(1) 每个结点的度都不大于 2;(2) 每个结点的孩子结点次序不能任意颠倒。由此定义可看出,一个二叉树中的每个结点只能含有 0、1 或 2 个孩子,而且每个孩子有左右之分。位于左边的孩子叫做左孩子,位于右边的孩子叫做右孩子。下给出了二叉树的五种基本形态:图(a)所示为一棵空的二叉树;图(b)所示为一棵只有根结点的二叉树;图(c)所示为一 棵只有左子树的二叉树(左子树仍是一棵二叉树
2020-07-03 10:26:22
5234
原创 6.1树的基本概念
6.1树的基本概念一、 树的基本概念(1)树的基本概念树是 n(n≥0)个结点的有限集合 T。当 n=0 时,称为空树;当 n>0 时,该集合满足如下条件:①其中必有一个称为根(root)的特定结点,它没有直接前驱,但有零个或多个直接后继。②其余 n-1 个结点可以划分成 m(m≥0)个互不相交的有限集 T1,T2,T3,…,Tm,其中 Ti又是一棵树,称为根的子树。每棵子树的根结点有且仅有一个直接前驱,但有零个或多个直接后继。下图给出了一棵树的逻辑结构图示,它如同一棵倒长的树。
2020-07-03 10:25:51
376
原创 5.5广义表
5.5广义表广义表,也是线性表的一种推广。它被广泛的应用于人工智能等领域的表处 理语言 LISP 语言中。在 LISP 语言中,广义表是一种最基本的数据结构,LISP 语言 编写的程序也表示为一系列的广义表。一、 广义表的概念在第 2 章中,线性表被定义为一个有限的序列( a1 ,a2 ,a3 ,…, an),其中 ai被限定 为是单个数据元素。广义表也是 n 个数据元素( d1 ,d2 ,d3 ,…, dn)的有限序列,但不 同的是,广义表中的 di 既可以是单个元素,还可以是一个广义表,通常记做
2020-06-06 23:34:24
7174
原创 5.4稀疏矩阵压缩存储下
5.4稀疏矩阵压缩存储下“列序”递增转置法的思考:采用稀疏矩阵存储方法,可否降低时间复杂度?(提示: 通过降低对稀疏矩阵三元组的扫描次数实现)方法二:“一次定位快速转置”法【算法思想】在方法一中,为了使转置后矩阵的三元组表 B 仍按“行序递增”存放,必须 多次扫描被转置矩阵的三元组表 A,以保证按被转置矩阵列序递增进行转置。因此要通过双 重循环来完成。改善算法的时间性能,必须去掉双重循环,使整个转置过程通过一重循环来完成,即只对被转置矩阵的三元组表 A 扫描一次,就使 A 中所有非零元的三元组“一次
2020-06-06 23:34:05
694
原创 5.3稀疏矩阵压缩存储上
5.3稀疏矩阵压缩存储上稀疏矩阵是指矩阵中大多数元素为零的矩阵。从直观上讲,当非零元素个数低于总元素的 30 %时,这样的矩阵为稀疏矩阵。如下图所示的矩阵 M、 N 中,非零元素个数均为 8 个, 矩阵元素总数均为 6 ×7 =42 ,显然 8 /42 <30 %,所以 M、 N 都是稀疏矩阵。1、稀疏矩阵的三元组表表示法( 1 ) 稀疏矩阵的三元组存储表示对于稀疏矩阵的压缩存储,采取只存储非零元素的方法。由于稀疏矩阵中非零元素 aij 的分布没有规律,因此,要求在存储非零元素值的同时还必
2020-06-06 23:33:42
898
原创 5.2规律分布特殊矩阵的压缩存储
5.2规律分布特殊矩阵的压缩存储规律分布的特殊矩阵元素分布具有一定规律的矩阵称为规律分布的特殊矩阵,如三角矩阵(方阵的上或下三 角全为零)和带状矩阵(若干条对角线含有非零元)。这类矩阵中元素分布的规律可以用数学公 式来反映。已知二维矩阵 A 中元素下标 i 和 j,作为转换函数 f 的自变量,计算出到一维内存空间的地址值 K,即 A[ i][ j]=B[ K],实现了原二维矩阵到压缩存储后的一维数组的存储映射。1 .三角矩阵三角矩阵大体分为三类:下三角矩阵、上三角矩阵、对称矩阵。对于一个 n 阶矩阵
2020-06-06 23:33:30
2394
原创 5.1数组的定义与顺序存储
5.1数组的定义与顺序存储——讲义1、数组的定义和运算数组是我们十分熟悉的结构,高级语言一般都支持数组这种数据类型。( 1 )数组的定义从逻辑结构上,数组可以看成是一般线性表的扩充。一维数组即为线性表, 而二维数组可以定义为“其数据元素为一维数组(线性表)”的线性表。依此类推, 即可得到多维数组的定义。以二维数组为例,如下图所示。可以把二维数组看成是一个线性表: A =(α1 ,α2 ,…,αn),其中αj( 1 ≤ j ≤ n)本身也是一个线性表,称为列向量,即αj=(a1j,a2j,…
2020-06-06 23:33:07
2500
原创 4.3串的链式存储与串的应用举例
4.3串的链式存储与串的应用举例1、块链串由于串也是一种线性表,因而也可以采用链式存储。因为串是一个特殊的线性表(表中每个元素就是一个字符)。在具体实现时,一个链表存放一个串值,每个结点既可以存放一个字符, 也可以存放多个字符。每个结点称为块,整个链表称为块链结构,为便于操作,再增加一个尾指针。块链结构可定义如下:#define BLOCK_SIZE 4 /*每结点存放字符个数 4*/ typedef struct Block{ char ch[BLOCK_SIZE]; stru
2020-06-02 11:28:57
1352
原创 4.2串的顺序存储结构
4.2串的顺序存储结构1、定长顺序串定长顺序串是将串设计成一种静态结构类型,串的存储分配是在编译时完成的。与前面所讲的线性表的顺序存储结构类似,可用一组地址连续的存储单元存储串的字符序列。1)定长顺序串存储结构定长顺序串类型定义如下:#define MAXLEN 40 typedef struct { /*串结构定义*/ char ch[ MAXLEN]; int len; }SString; 其中 MAXLEN 表示串的最大长度,ch 是存储字符串的一维数组,每个分量
2020-06-02 11:28:45
923
原创 4.1串的基本概念与抽象数据类型
4.1串的基本概念1、串的基本概念字符串(String)是由零个或多个字符组成的有限序列记为: S = ′a1 a2 … an′( n ≥ 0 )其中 S 是串的名字,用单引号括起来的字符序列是串的值,每个 ai( 1 ≤ i≤ n)可 以是字母、数字或其他字符。n 是串中字符的个数,称为串的长度,n=0 时的串称为空串( Null String)。需要特别指出的是,串值必须用一对单引号括起来( C 语言中是双引号),但单引号是界限符,它不属于串,其作用是避免与变量名或常量混淆。子串:串中任意
2020-06-02 11:28:31
1056
原创 3.10队列应用
3.10讲队列应用队列的应用举例:1.打印杨辉三角【算法思想】由上图可看出杨辉三角形的特点:即每一行的第一个元素和最后一个元素均为 1,其他位置上的数字是其上一行中与之相邻的两个整数之和。所以第 i 行上的元素要由第 i-1 行中的元素来生成。可以利用循环队列实现打印杨辉三角形的过程:在循环队列中依次 存放第 i-1 行上的元素,然后逐个出队并打印,同时生成第 i 行元素并入队。在整个过程中, 杨辉三角形中元素的入队顺序如下图所示。下面以用第 6 行元素生成第 7 行元素为例说明具体过程。
2020-05-28 17:23:09
193
原创 3.9队列的顺序存储(循环队列)
3.9队列的顺序存储(循环队列)1、顺序队列的假溢出现象队列的一种顺序存储称为顺序队列。与顺序栈类似,在队列的顺序存储结构中,用一组地址连续的存储单元依次存放从队头到队尾的元素,如一维数组 Queue[MAXSIZE]。由于队列中队头和队尾的位置都是动态变化的,因此需要附设两个指针 front 和 rear。front:指示队头元素在数组中的位置;rear:指示真实队尾元素相邻的下一个位置。初始化队列时,令 front = rear =0;入队时,直接将新元素送入尾指针 rear 所指的
2020-05-28 17:22:35
1437
原创 3.8队列的定义与队列的链式存储
3.8队列的定义与队列的链式存储1、队列的定义队列 (Queue) 是另一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出 (Fist In Fist Out,缩写为FIFO)的特性。在队列中,允许插入的一端叫做队尾(rear);允许删除的一端则称为队头(front)。队列的抽象数据类型定义ADT Queue数据元素:可以是任意类型的数据,但必须属于同一个数据对象。关系:队列中数据元素之间是线性关系。基本操作:(1) InitQueue(&a
2020-05-28 17:22:18
272
原创 3.7栈与递归(下)----递归与非递归转换
3.7栈与递归(下)----递归与非递归转换1、递归算法到非递归算法的转换递归算法具有两个特性:①递归算法是一种分而治之、把复杂问题分解为简单问题的求解问题方法, 对求解某些复杂问题,递归算法的分析方法是有效的。②递归算法的效率较低。 为此,在求解某些问题时,希望用递归算法分析问题,用非递归算法求解具体问题。(1)消除递归的原因:其一,有利于提高算法时空性能,因为递归执行时需要系统提供隐式栈实现 递归,效率较低。其二,无应用递归语句的语言设施环境条件,有些计算机语言不支持递归功 能,如 FO
2020-05-28 17:21:57
605
原创 3.6栈与递归(上)
3.6栈与递归(上)栈非常重要的一个应用就是在程序设计语言中用来实现递归。递归是指在定 义自身的同时又出现了对自身的引用。如果一个函数在其定义体内直接调用自 己,则称为直接递归函数;如果一个函数经过一系列的中间调用语句,通过其他函数间接调用自己,则称为间接递归函数。具有递归特性的问题1、递归定义的数学函数上述 Ackerman 函数可用一个简单的 C 语言函数描述如下:int ack(int m,int n) { if(m==0) return n+1; else
2020-05-28 17:21:43
836
原创 3.5讲栈的应用
3.5讲栈的应用栈的应用举例栈结构所具有的“ 后进先出”特性,使得栈成为程序设计中的有用工具。本节将讨论栈应用的两个典型例子:1、括号匹配问题假设表达式中包含三种括号:圆括号、方括号和花括号,它们可互相嵌套,如 ( [ { } ] ( [ ] ) )或( { ( [ ] [ ( ) ] ) } )等均为正确的格式,而 { [ ] } ) }或 { [ ( ) ] 或 ( [ ] }均为不正确的格式。在检验算法中可设置一个栈,每读入一个括号,若是左括号,则直接入栈,等待相匹配的同类右括号;若读入
2020-05-28 17:21:28
241
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人