数据结构
文章平均质量分 70
爱吃银鱼蒸蛋的麻里
一无所有,所以无所不能。
展开
-
用数组模拟——单链表,树和图的存储(邻接表、邻接矩阵)
文章目录一. 单链表初始化存储元素删除头结点插入数据(在下标为k的结点后面插入一个元素x)删除下标为k的点后面的点二. 树和图的存储Ⅰ. 邻接表初始化将边加入图或树中Ⅱ. 邻接矩阵一. 单链表int head, idx; //head存储链表头,idx表示当前模拟到了哪个结点int e[N], ne[N]; //e[]存储数据域的值,ne[]存储结点的next指针初始化为空链表,所以:void init(){ head = -1; idx = 0;}存储元素在表头插入原创 2021-02-02 00:21:54 · 1078 阅读 · 0 评论 -
KMP算法过程及C++代码
文章目录KMP算法思想KMP算法过程示例如何确定P中的哪个字符与i进行比较KMP算法思想KMP算法是D.E.Knuth,J.H.Morris和V.R.Pratt共同提出的,简称为KMP算法。该算法较BF算法有较大的改进:每当一趟匹配过程中出现字符不相等时,主串指示器 i 不用回溯,而是利用已经得到的“部分匹配”结果,将模式串向右“滑动”尽可能远的一段距离后,与 i 对齐,继续进行比较。KM...原创 2020-06-08 23:38:02 · 381 阅读 · 0 评论 -
串的模式匹配算法——BF算法(C++代码)
子串的定位操作通常称作串的匹配模式(其中P,T称为模式串,PaTtern),是各种串处理系统中最重要的操作之一。在串的模式匹配中,子串P称为模式,主串S称为目标。示例: 目标S:"Beijing" 模式P:"jin" 匹配结果 = 3(匹配位置从0开始) 求子串位置的定位函数Brute—Force 简称BF算法,亦称简单匹配算法。采用穷举的思想。具体思路:初始时让目标 S ...原创 2020-02-05 19:17:32 · 4033 阅读 · 0 评论 -
串的定义,表示和实现 及 相关算法的实现
文章目录一. 串类型的定义二. 串的表示和实现定长顺序存储表示堆分配存储表示块链存储表示存储利用率分析三. 串的相关算法(堆存储部分操作的实现)初始化空串算法提取子串算法串的连接算法一. 串类型的定义字符串是n(n>=0)个字符的有限序列,记作:S=“C1C2C3...Cn”其中:S是串名字;“C1C2C3…Cn” 是串值;Ci 是串中字符;n 是串的长度;n=0 称为...原创 2020-02-05 17:06:11 · 1260 阅读 · 0 评论 -
图的遍历——用邻接表实现BFS
广度优先搜索(BFS)遍历设计思想:访问顶点v;访问顶点v的所有未被访问过的邻接点,假设访问次序是Vi1,Vi2,…,Vit;按Vi1,Vi2,…,Vit的次序,访问每个顶点的所有未被访问过的邻接点,直到图中所有和初始点v有路径相通的顶点都被访问过为止。BFS的具体分析:从V0出发,V0首先被访问,访问完毕以后,它的邻接点是1和3,按照广度优先遍历的策略,应该先访问V1,紧接着再...原创 2020-02-04 21:48:14 · 769 阅读 · 0 评论 -
图的遍历——用邻接表实现DFS
文章目录一. 遍历思想二. DFS(深度优先遍历)设计思想三. 具体分析四. 实现深度优先遍历的递归算法一. 遍历思想给定一个图G=(V,E)和其中任意一个顶点v,从顶点v出发,访问图G中的所有顶点而且每个顶点仅被访问一次,这一过程称为图的遍历。为了避免同一顶点被访问多次,在遍历图的过程中,必须记下每个已被访问过的顶点。为此设一个辅助数组visited[],用以标记顶点是否被访问过,其...原创 2020-02-04 20:35:43 · 1303 阅读 · 0 评论 -
图的概念,图的存储结构(邻接矩阵,邻接表)及相关算法
文章目录一. 图的相关概念和术语概念无向图有向图度,入度和出度子图完全无向图和完全有向图稀疏图和稠密图简单路径,回路(环)连通,连通图和连通分量(无向图)强连通图和强联通分量(有向图)权和网二. 图的存储结构—邻接矩阵无向图有向图有权图(网)图的邻接矩阵的特点图的邻接矩阵类型声明三. 图的存储结构—邻接表无向图有向图有向图的逆邻接表图的邻接表的特点图的邻接表存储结构的类型声明四. 邻接矩阵的相关算...原创 2020-02-03 21:41:25 · 1841 阅读 · 0 评论 -
赫夫曼树的定义及构造,赫夫曼编码的定义及构造,算法实现和存储
文章目录一. 赫夫曼树(最优二叉树)二. 构造赫夫曼树三. 赫夫曼编码四. 构造赫夫曼编码五. 赫夫曼树和赫夫曼编码的存储表示六. 求赫夫曼树和赫夫曼编码的算法一. 赫夫曼树(最优二叉树)设二叉树具有n个带权值的叶子结点,从根结点到每一个叶子结点都有一个路径长度。从根结点到各个叶子结点的路径长度与相应结点权值的乘积的和称为该二叉树的带权路径长度,记作其中,Wi为第i个叶子结点的权值,L...原创 2020-02-03 02:28:38 · 1505 阅读 · 0 评论 -
树,森林与二叉树的相互转化,树的遍历
文章目录一. 森林与二叉树可相互转化的原因二. 树转化为二叉树三. 森林转化为二叉树四. 二叉树还原为树五. 二叉树还原为森林六. 树的遍历先根遍历后根遍历一. 森林与二叉树可相互转化的原因由于二叉树和树都可以用二叉链表作为存储结构,则以二叉链表作为媒介可导出树与二叉树之间的一个对应关系也就是说,给定一棵树,可以找到唯一的一棵二叉树与之对应,从物理结构来看,它们的二叉链表是相同的,只是解释...原创 2020-02-03 01:14:54 · 2295 阅读 · 0 评论 -
线索二叉树的存储结构,二叉树的建立及相关算法
文章目录一. 线索二叉树的概念二. 线索二叉树的存储结构1. 线索二叉树的类型定义2. 中序线索二叉树过程三. 二叉树的建立(以中序线索二叉树为例)四. 二叉树的遍历(以中序线索二叉树为例)(1). 具体操作(2).算法思想(3). 代码实现一. 线索二叉树的概念对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域。利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这...原创 2020-02-02 23:31:54 · 1119 阅读 · 0 评论 -
遍历二叉树的操作定义和算法实现,先序遍历的非递归算法设计
文章目录一. 遍历二叉树的三种操作定义(一). 先序遍历(DLR)(二). 中序遍历(LDR)(三). 后序遍历(LRD)二. 遍历二叉树的三种算法实现(一). 先序遍历(二). 中序遍历(三). 后序遍历三. 先序遍历的非递归算法设计二叉树的遍历是按一定的次序访问树中的所有结点,使每个结点恰好被访问一次。其中遍历次序保证了二叉树上每个结点均被访问一次切仅有一次。遍历就是把二叉树结点按某种次...原创 2020-02-02 22:30:58 · 734 阅读 · 0 评论 -
二叉树的性质及存储结构
文章目录一. 二叉树的定义二. 二叉树的性质性质1性质2性质3性质4性质5满二叉树和完全二叉树三. 二叉树的存储结构顺序存储结构链式存储结构二叉链表表示三叉链表表示二叉树链表表示的示例一. 二叉树的定义二叉树是另一种树形结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树或为空,或是由一个根结点加上两棵分别称...原创 2020-02-02 21:04:42 · 670 阅读 · 0 评论 -
树的概念及存储结构(双亲表示法,孩子表示法,孩子兄弟表示法)
文章目录一. 树的概念二. 树的存储结构(一). 双亲表示法(二). 孩子表示法1. 定长结点链表存储结构2. 孩子链表存储结构(三). 孩子兄弟表示法一. 树的概念树(Tree)是n(n>=0)个结点的有限集。当 n = 0 时,称为空树。在任意一颗非空树中:有且仅有一个特定的称为 根(Root) 的结点;如上图,A为根当 n > 1 时,其余结点可分为m(m &...原创 2020-02-02 19:40:01 · 4665 阅读 · 1 评论 -
归并排序
归并排序是多次将两个或两个以上的有序表合并成一个新的有序表。归并排序设计思想:通过“归并”两个或两个以上的记录有序子序列,逐步增加记录有序序列的长度。在内部排序中,通常采用的是2-路归并排序,即:将两个位置相邻的记录有序子序列归并为一个记录的有序序列。注:若有三个有序表进行归并的话,称为3-路归并;由k个有序序列进行归并的话就为k-路归并。归并排序的具体分析:...原创 2020-01-23 16:40:05 · 199 阅读 · 0 评论 -
快速排序
快速排序设计思想:找一个记录(例如取第一个记录),以它的关键字作为==“枢轴”。凡其关键字小于枢轴的记录均移动至该纪录“之前”。凡其关键字大于枢轴的记录均移动至该纪录“之后”。 即对无序的记录序列进行一次划分。之后分别对分割所得两个子序列“递归”进行快速排序,快速排序的具体分析:设两个下标 i 和 j 。i 标记整个序列的起始位置,j 标记整个序列最后一个元素所在的位置。接着使用...原创 2020-01-22 15:40:12 · 216 阅读 · 0 评论 -
数据结构——绪论
程序=算法+数据结构一. 基本概念和定义:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。有时,一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。数据对象是性质相同的数据元素的集合,是数据的一个子集。在任何问题中,数据元素都不是孤立存在的,而是在...原创 2020-01-21 20:18:18 · 1878 阅读 · 0 评论 -
线性表(顺序表,线性链表,循环单链表,双向链表)
一. 线性表的基本概念:(一). 线性表的定义:线性表是由n(n>=0)个相同类型的数据元素组成的有限序列。标记为: L=(a1,a2,...,ai,...,an)线性表中的元素的个数n定义为线性表的长度,当n=0时为空表。当n>0时,线性表的逻辑结构如下图所示:逻辑特征:(1). 若至少含有一个元素,则只有唯一的一个起始元素;(2). 若至少含有一个...原创 2020-01-20 20:45:54 · 1044 阅读 · 0 评论 -
队列的基本操作(顺序队列,循环队列,链队列)
一. 定义:和栈相反,队列是一种“先进先出”的线性表。即它只能在表的一端进行插入,在表的另一端删除元素。在队列中,允许插入的一段叫做队尾,允许删除的一端则称为队头。队列的插入操作称为进队,删除操作称为出队。新插入的元素只能添加到队尾,被删除的元素只能是排在队头的元素。二. 队列的顺序表示和实现:(一) . 顺序队列:队列的顺序存储结构简称为“顺序队列”,它是由一个一维数...原创 2020-01-17 17:17:27 · 3093 阅读 · 3 评论 -
栈的基本操作
栈1.概念:栈简单的说就是“先进后出”的数据结构,就相当于几辆汽车进入了一个只允许一辆车通行的死胡同,先进去的车辆只能等最后进去的车辆出来后才能出来。2.栈的定义:栈是仅在表尾进行插入或删除操作的线性表。表尾端具有其特殊的含义,称为栈顶,表头端称为栈底,不含元素的空表称为空栈3.顺序栈的定义:typedef struct{SElemType *base; //定义栈底指针S...原创 2020-01-07 20:16:28 · 386 阅读 · 0 评论