数据结构与算法
mrHeis
这个作者很懒,什么都没留下…
展开
-
数据结构之开场白(Data Structure--Prologue)
就来谈谈数据结构的两种分法:逻辑结构和物理结构逻辑结构定义:指数据对象中数据元素之间的相互关系集合结构集合结构中的数据元素只有一种关系——属于同一个集合(但是不是gay)就比如数学中的集合: 线性结构线性结构中的数据元素之间是一对一的关系见图树形结构树形结构中的数据元素之间存在一对多的层次关系见图4. 图形结构- **图形结构中的数据...原创 2019-07-24 00:44:47 · 293 阅读 · 0 评论 -
数据结构之图的最短路径
图的最短路径迪杰斯特拉(Dijkstra)算法迪杰斯特拉算法是计算无向图或有向图的最短路径,而且是运用了深度遍历的方法来计算的。其中数组 Patharc[MAXVEX] 用来存储最短路径中每个顶点的下标ShortPathTable[MAXVEX] 用来存放起始顶点到各顶点最短路径的权值和Final[k] 用来标记顶点 k 存在于最短路径的顶点集中进行简单的演示先来张无向图...原创 2019-09-29 23:33:48 · 1150 阅读 · 0 评论 -
图的最小生成树之普里姆和克鲁斯卡尔算法
普里姆(Prim)和克鲁斯卡尔(Kruskal)算法这两种算法都是来求图的最小生成树,先来张图的图片吧(来源于书上)普里姆算法从图的一个顶点出发,寻找到与该顶点构成的权值最小的邻接顶点,然后将该邻接顶点存放到,一该顶点数字标识符为索引的数组下,且将读到的权值存入权值数组中(无论有无权值)来标记顶点已加入生成树中;就这样依次循环。该算法中由于循环嵌套非常明显,经过估算其时间复杂度为 ...原创 2019-09-18 23:20:37 · 2305 阅读 · 0 评论 -
数据结构之图的创建以及深度和广度优先遍历
图的存储结构图这种结构想想就复杂,图中既有顶点还有两顶点构成的边,依靠简单的顺序存储结构是无法来表达的。因此就有了邻接矩阵存储邻接表存储邻接矩阵用矩阵来存储图,想想就是二维数组啦;不过只用二维数组来存储元素来说,如果这些元素是字符,那岂不是很麻烦,如果是将其转换为数字关系来存储会非常方便;于是就另需要一个一维数组来存储这些元素,用这些元素对应的数组的索引来表示图的关系.先来看...原创 2019-09-07 23:01:44 · 1982 阅读 · 0 评论 -
数据结构之线索二叉树
线索二叉树在二叉树的前、中、后序三种遍历出来的树的结点,将其每一种遍历出现的结果换个角度将其排列成一个线性序列,再细看,这些这些线性序列中的每一个元素(结点)都有且仅有一个前驱结点和后继结点。而且更重要的是二叉树的每个叶子结点的左右指针都是空的,是不是觉得不够节约,那么综合上述及其他因素,就有了线索二叉树。先看看原始的二叉树的图再来看看将上图线索化后的图(中序遍历版)讲一讲二...原创 2019-08-31 00:02:52 · 194 阅读 · 0 评论 -
二叉树三种遍历的递归和非递归版本
二叉树(书上定义)定义:二叉树(Binary Tree)是包含n个节点的有限集合,该集合或者为空集(此时,二叉树称为空树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。这二叉树就是树的一种特殊结构,特殊在一个结点最多只能有两个子结点特殊二叉树斜树定义:所有结点都只有左子树的二叉树叫左斜树,所有结点都只有右子树的二叉树叫右斜树,这两者...原创 2019-08-28 00:26:34 · 253 阅读 · 0 评论 -
数据结构之树的存储结构
树树是一种一对多的数据结构,这个一对多很好解释,就比如一只狗妈妈,会有多只小奶狗,这不就有一对多的意思吗!树的根节点有且只有一个,就比如小奶狗们只有一个亲狗妈。 那么图上的 B C D E 都是树的根节点 A 的孩子; 总之,树就是有很多结点构成,只不过这些结点在树中会有不同的称呼,来分析一下下图 度----结点拥有的子树数称为结点的度, 度为 0 的结点称为树...原创 2019-08-28 00:23:37 · 345 阅读 · 0 评论 -
数据结构之链队列(c语言实现)
队列的链式存储——链队列话说链栈有一个栈顶指针;而队列和栈是有差别的,队列只能一头进另一头出,而链队列的进出口都有警卫把守,分别是队头指针(front)大哥和队尾指针(rear)小弟,有的剧情会是这样:大哥躺在椅子上小弟帮大哥办事,那么这头指针大哥就是在队的头部始终不动,稳如狗,而尾指针小弟就随着队列有元素入队,尾指针就要往右移动。小弟都是这样,再累也不怕。来看一看大哥和小弟的生活图...原创 2019-08-16 22:45:06 · 407 阅读 · 0 评论 -
数据结构之栈的链式存储(c语言实现)
栈的链式存储——链栈链栈似乎和单链表有着不可告人的“血缘”关系,想一想都是线性结构,关系是摆脱不鸟的;先看一个来自《大话数据结构》一书中的一图:让咋们把头向右旋转 90° (不要维持太久),是不是惊讶到不就是抛弃了头节点的单链表吗!那么,这关系是不是很明显了。不过为了方便链栈定义的结构体在单链表上的定义做了改动,改动后如下typedef char ElemType;typ...原创 2019-08-12 22:33:33 · 1026 阅读 · 0 评论 -
数据结构之循环队列(c语言实现)
队列——循环队列一般队列的顺序存储如图这种队列顺序存储和插入元素用头插法的顺序表的顺序存储简直一模一样,不过在顺序表的顺序存储的数组的有值部分的最右边加一个对标记(图中多了一个标记),即可。循环队列会更加方便入队和出队,不过作为顺序存储,循环队列面临着数组可能会溢出的问题。还是来看看,循环队列的图吧。循环队列的抽象数据类型> init_Queue(&Q); ...原创 2019-08-14 23:21:14 · 1195 阅读 · 0 评论 -
栈的应用之四则表达式中缀转后缀(c语言实现)
栈的应用——四则表达式中缀转后缀#include <stdio.h>#include <stdlib.h>#include <string.h>typedef char ElemType;typedef struct StackNode{ ElemType data; struct StackNode *next;}Stack...原创 2019-08-14 22:09:37 · 356 阅读 · 0 评论 -
数据结构之栈的顺序存储(c语言实现)
栈的顺序存储栈属于线性结构,所以栈的顺序存储和顺序表的顺序存储以及链式储存有点相似。《大话数据结构》上解释道:栈是限定仅在表尾进行插入和删除操作的线性表在栈中允许插入和删除的一端称为栈顶,那么另一端称为栈底。栈的操作是先进后出。来个栈的相关图栈的顺序存储的结构体的定义typedef struct{ SElemType data[MAXSIZE]; ...原创 2019-08-09 22:59:08 · 817 阅读 · 0 评论 -
数据结构之循环链表(c语言实现)
循环链表形成:将单链表中的尾节点的指针端指向头节点,这样整个单链表形成了一个环,因此称为单循环链表,也叫循环链表。来个空表和非空表的图循环链表的插入和删除和单链表很相似,就不详细介绍了再来个合并 rearA 和 rearB 两个循环链表的图代码篇#include <stdio.h>#include <stdlib.h>typedef int E...原创 2019-08-06 22:43:24 · 3011 阅读 · 0 评论 -
数据结构之双向链表(c语言实现)
双向链表想来个维基百科上的解释:双向链表,又稱為双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。图片双向循环链表是结合了单链表和单循环链表,也就是将双链表的头和尾指针指向的 NULL 改为相互指向,即可;且判断条件克根据单循环链表以及双链表来做小改动关于双链表的插入和删...原创 2019-08-07 23:33:07 · 361 阅读 · 0 评论 -
数据结构之单链表
这次介绍一下线性表的链式存储——单链表来个关于链式存储的详细图关于链表的插入和删除的图就不贴出来了,直接上代码#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;...原创 2019-07-31 23:52:54 · 93 阅读 · 0 评论 -
数据结构之静态链表(c语言实现)
#单链表之静态链表静态链表是没有指针的 “单链表” ,它用数组进行描述先来个空的静态链表: 此表的右上方的小方框就类似与指针了,只是把它作为了游标 cur ;静态链表中的第一个元素和最后一个元素作为特殊处理,且最后一个元素类似于单链表中的头节点。不断插入元素后,最后一个元素的游标就将存入第一个元素的数组下标接着来一个已经插入了几个元素的静态链表插入元素后静态链表就...原创 2019-08-04 00:07:37 · 367 阅读 · 0 评论 -
数据结构之线性表顺序存储
先给出书上关于顺序存储定义线性表的顺序存储结构(先称它顺序表),指的是用一段地址连续的存储单元依次存储线性表的数据元素就拿数组来说吧,以长度为 100 的数组,从它的开始连续的存储数据,其中那段存储了数据部分随着存入的数据增多,其长度也在变化。顺序表的结构体定义如下typedef int ElemType;typedef struct SqList{ ElemType da...原创 2019-07-24 00:47:39 · 121 阅读 · 0 评论 -
数据结构之图的拓扑排序和关键路径
拓扑排序百度百科上对拓扑排序的解释:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。图的拓扑排序是解决工程能否顺序执行。...原创 2019-10-07 00:46:27 · 995 阅读 · 0 评论