![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
weixin_36049506
这个作者很懒,什么都没留下…
展开
-
线性表:线性表的链式存储结构
线性表的链式存储结构线性表的链式存储结构单链表头结点和头指针结点和单链表的c语言描述单链表操作的实现单链表获取第i个数据元素插入数据元素删除数据元素重置为一个空表生成包含n个数据元素的链表线性表的链式存储结构单链表概念: 用一组地址任意的存储单元存放线性表中的数据元素。以元素(数据元素的映象)+指针(指示后继元素存储位置)‘     =结点...原创 2019-01-10 16:27:47 · 892 阅读 · 0 评论 -
图:图的遍历和最小生成树
文章目录图的遍历深度优先搜索广度优先搜索(连通网的)最小生成树算法一:普里姆算法(加点法)算法二:克鲁斯卡尔算法(加边法)图的遍历深度优先搜索sg1和sg2有交叉?没有交叉就是树了 根据访问路径可以构造一棵深度优先生成树广度优先搜索(连通网的)最小生成树问题:假设要在n个城市之间建立通讯联络网,则连通n个城市只需要修建n-1条线路,如何在最节省经...原创 2019-03-09 14:05:38 · 639 阅读 · 0 评论 -
图:拓扑排序、并查集
问题:假设以有向图表示一个工程的施工图或程序的数据流图,则图中不允许出现回路。检查有向图中是否存在回路的方法之一,是对有向图进行拓扑排序。例子:无前驱的顶点特点:入度为0。因此选取顶点a,并将它从图中删掉。接下来再选一个无前驱的顶点b,将其从图中删掉。重复此过程。...原创 2019-04-17 23:11:57 · 144 阅读 · 0 评论 -
图:关键路径和最短路径
文章目录关键路径最短路径关键路径顶点是事件i和事件j,边的权值是活动所需的时间例子:第一步:确定哪些活动是关键活动(最早开始时间等于最晚开始时间)第二步:确定哪些路径是关键路径(关键活动构造的路径)最短路径因为v6无法到达v5,所以v1到v5的最短路径就是21。将每一顶点当作源点,依次调用迪杰斯特拉算法,同样可以得到每一对顶点之间的最短路径,事...原创 2019-03-09 15:17:10 · 2744 阅读 · 0 评论 -
归并排序
最近要对大量数据稳定性排序,查了一些资料后选择了归并排序,这里记录一下。归并排序的基本操作归并排序的基本操作是合并两个已知的表。因为这两个表是已排序的,可以一趟排序来完成合并。基本的合并算法是取两个输入数组A和B、一个输出数组C以及三个计数器(Actr Bctr Cctr),他们初始于对应数组的开始端。A[Actr]和B[Bctr]中的较小元素被复制到C中的下一位置,相关的计数器向前推进一步...原创 2019-04-07 14:17:16 · 75 阅读 · 0 评论 -
图:邻接表、逆邻接表和十字链表
文章目录邻接表数据结构建图、删图图的基本操作DFS遍历BFS遍历逆邻接表邻接表数据结构邻接表由表头顶点表和顶点单链表构成:表头节点表(顺序存储)数据域指针域datafirstarcdatafirstarc……顶点单链表(链式存储)数据域数据域指针域adjvexinfonextarc例子typedef int...原创 2019-04-16 23:28:05 · 2659 阅读 · 0 评论 -
限定无环KSP算法
文章目录偏离路径算法什么是偏离路径Yen KSP目前限定无环KSP算法主要有偏离路径算法和改进Dijkstra算法偏离路径算法算法目标:构建包含K个最短路径的K最短路径树T,其根节点为源点s,叶子节点为目标点t的K个备份。树中每个从s到叶子节点的路径都是K个最短路径之一。可以看出此树和平常看到的树不同,它包含了重复节点。例子:上图源点为1,目标点为5,包含3条最短路径:p1={1,2...原创 2019-04-18 12:43:05 · 1446 阅读 · 0 评论 -
树:树和森林
树:树和森林树和森林的表示方法树的三种存储结构双亲表示法孩子链表表示法树的二叉链表(孩子-兄弟)存储表示法森林和二叉树的转换森林和二叉树的对应关系树转换为二叉树森林转换为二叉树二叉树还原为树或森林树和森林的遍历建立树和二叉树的关系,将树的操作转换成二叉树的简单操作树和森林的表示方法树的三种存储结构双亲表示法孩子链表表示法树的二叉链表(孩子-兄弟)存储表示法双亲表示法实际上就是一...原创 2019-04-18 12:46:58 · 276 阅读 · 0 评论 -
二叉树非递归后序遍历
方法1用栈存储还未遍历右子树的结点。用last记住上次遍历的结点,如果上次访问的点是右孩子,说明右子树已经遍历过了。void PostOrderTraversal(Tree* t){ Tree *p=t,*Stack[50],last=nullptr; int top = -1; while(p||top>-1){ while(p){ //栈存储还未访问过右子树的结点 ...原创 2019-06-20 20:30:20 · 105 阅读 · 0 评论 -
图:图的定义和存储
图文章目录图图的定义和基本术语ADT图的存储结构图的定义和基本术语(一)图Graph的定义图是一种网状数据结构,形式化定义如下:{Graph=(V,R)V={x∣x∈DataObject}R={VR},VR={<x,y>∣P(x,y),(x,y∈V)}\left\{\begin{array}{lr}Graph=(V,R) \\ V=\{x|x \in...原创 2019-03-09 10:38:01 · 271 阅读 · 0 评论 -
用O(1)的时间复杂度删除单链表中的某个节点
转载:用O(1)的时间复杂度删除单链表中的某个节点用O(1)的时间复杂度删除单链表中的某个节点给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};函数的声明如下:void DeleteNode(ListNode* pLi...转载 2019-01-22 20:33:09 · 222 阅读 · 0 评论 -
算法和算法分析基础
算法和算法分析基本概念算法的特性算法和程序算法与数据结构算法设计的要求评价算法的标准:算法效率的衡量方法和准则:如何估算算法的时间复杂度总结:推导大O阶方法平均时间复杂度和最坏时间复杂度时间复杂度比较关系式算法的存储空间需求之前盲目的学了一些链表、二叉树、图论之类的数据结构,都是零碎的,不成体系,囫囵吞枣,没有深入理解,也不会用,在这里补充一些概念性的东西。基本概念算法的定义:是对特定问题...原创 2019-01-05 16:49:40 · 1552 阅读 · 0 评论 -
练习:分析时间复杂度
例1. 分析以下算法的时间复杂度。void f(int n){ int p=1,d=n,f=n; while(d>0) { if(d%2==1) p=p*f; f=f*f;d=d/2; }}分析:算法中while循环的if条件包含的p=p*f语句可以不考虑,因为它执行的次数不超过d=d/2语句的执行次数。基本运算是语句d=d/2(或f=f*f),设其执行时间为T(...原创 2019-01-05 20:58:28 · 3471 阅读 · 0 评论 -
练习:线性表
例1. 若线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。A. 单链表B. 仅有头指针的单循环链表C. 双链表D. 仅有尾指针单循环链表分析:尾指针可以将 “最后一个元素之后插入一个元素” 这个操作的时间复杂度降为O(1);单循环链表使得我们能通过尾指针的后继找到链表的第一个元素,所以 “删除第一个元素” 这个操作的时间复杂度也是O...原创 2019-01-12 09:22:44 · 790 阅读 · 0 评论 -
栈、队列和数组
栈、队列和数组栈栈的类型定义栈的基本操作栈的应用举例栈类型的实现顺序栈链栈栈栈的类型定义ADTStack{数据对象:D={ai∣ai∈ElemSet,i=1,2,...,n,n≥0}数据关系:R1={<ai−1,ai&am原创 2019-01-13 18:42:14 · 390 阅读 · 0 评论 -
线性表:线性表的顺序存储结构
线性表线性表的逻辑结构线性结构的基本特征线性表的定义利用上述定义的线性表类型实现其它的更复杂操作线性表的逻辑结构线性结构的基本特征线性结构是一个数据元素的有序(次序)集。集合中必存在唯一的一个“第一元素”;集合中必存在唯一的一个“最后元素”;除最后元素外,均有唯一的后继;除第一元素外,均有唯一的前驱。线性表的定义ADT List{数据对象:D={ai | ai | ∈\...原创 2019-01-09 21:30:11 · 489 阅读 · 0 评论 -
树:二叉树
树树的类型定义对比树形结构和线性结构的特点二叉树二叉树的类型定义二叉树的重要特性树的类型定义{数据对象D:D是具有相同特性的数据元素的集合。数据关系R:若D为空集,则称为空树;否则:1)在D中存在唯一的称为根的数据元素root,2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每一棵子集本身又是一棵符合本定义的树,称为根roo...原创 2019-01-26 11:37:28 · 246 阅读 · 1 评论 -
递归为什么那么慢?递归的改进算法
递归为什么那么慢?递归的改进算法转载自:https://www.jianshu.com/p/6bdc8e3637f2不知道大家发现没有,执行递归算法,特别是递归执行层数多的时候,结果极其的慢,而且递归层数达到一定的值,还可能出现内存溢出的情况。本文就要将为你解释原因和对应的解决方案。一、递归与循环1.1所谓的递归慢到底是什么原因呢?大家都知道递归的实现是通过调用函数本身,函数调用的时候,...转载 2019-01-27 21:51:18 · 467 阅读 · 0 评论 -
字符串匹配算法
字符串匹配:在匹配串中寻找模式串是否出现,并返回模式串的位置。注意和最长公共子序列相区别(LCS: Longest Common Substring)。常用的字符串匹配算法:假设匹配串长度为m,模式串长度为n。暴力匹配Brute Force算法:首先将匹配串和模式串左对齐,然后从左向右一个一个进行比较,如果不成功则模式串向右移动一个单位重新比较。速度最慢。最不理想的情况下,时间复杂度...原创 2019-06-28 20:37:46 · 154 阅读 · 0 评论