数据结构
文章平均质量分 77
麦地与诗人
读书不是为了雄辩和驳斥,也不是为了轻信和盲从,而是为了思考和权衡.
展开
-
让数据结构变得通俗易懂(C语言)
0. 数据结构概述什么是数据结构?简单地说,数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作则是低效的。首先我们需要理解各种数据结构,才能在处理实际问题时选取最合适的数据结构。为什么我们需要数据结构?数据是计算机科学当中最关键的实体,而数据结构则可以将数据以某种组织形式存储,因此,数据结构的价值不言而喻。无论你以何种方式解决...原创 2019-07-02 17:34:16 · 607 阅读 · 0 评论 -
树-----二叉树3---遍历二叉树
二叉树的遍历二叉树的遍历,是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。这里有两个关键词:访问次序访问:其实是要根据实际的需要来确定具体做什么,比如,对每个结点进行相关计算,输出打印等,它算作是一个抽象操作。在这里,我们就可以简单地假定就是输出结点的数据信息。线性结构的遍历,最多也就是从头至尾、循环、双向等简单的遍历方式。二叉树的遍...原创 2019-09-01 11:05:33 · 202 阅读 · 0 评论 -
树-----二叉树2---二叉树的存储结构
二叉树的存储结构1-----顺序存储结构前面我们已经谈到了树的存储结构,知道用顺序存储对树这种一对多的关系结构实现起来比较困难,但是二叉树是一种特殊的树,因此由于这种特殊性,使得用顺序存储结构也可以实现。二叉树的顺序存储结构,就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标,要能够体现结点之间的逻辑关系,比如,双亲与孩子的关系,左右兄弟的关系,等。完全二叉树的顺序存储...原创 2019-09-01 10:37:25 · 447 阅读 · 0 评论 -
树-----二叉树1---简介
二叉树每个结点最多有两棵子树,所以,二叉树中不存在度大于2的结点。没有子树,或者只有一棵子树都是可以的。左子树、右子树是有顺序的,次序不能任意颠倒。即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。二叉树的五种基本形态空二叉树只有一个根节点根节点只有左子树根结点只有右子树根节点既有左子树,又有右子树三个结点的二叉树有几种形态?5种满二叉树叶子结点只...原创 2019-08-31 10:30:36 · 839 阅读 · 0 评论 -
树的存储结构-----3---孩子兄弟表示法
孩子兄弟表示法前面两个,我们分别从双亲的角度和孩子的角度研究树的存储结构,如果,我们从树结点的兄弟的角度又会如何呢?当然,对于树这样的层级结构来说,只研究结点的兄弟是不行的,经观察后发现,任意一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的。因此,我们设置两个指针,分别指向该结点的第一个孩子和此结点的右兄弟。结点结构:data:数据域;firstchild:...原创 2019-08-30 22:13:39 · 4448 阅读 · 0 评论 -
树的存储结构-----2---孩子表示法
孩子表示法换一种完全不同的考虑方法。由于树中每个结点可能有多棵子树,我们可以设置,让每个结点有多个指针域,其中每个指针域指向一棵子树的根节点,我们把这种方法叫做多重链表表示法。不过,树的每个结点的度,也就是它的孩子的个数是不同的。所以可以设置两种方案来解决。方案一一种是指针域的个数就等于树的度,树的度是树各个结点度的最大值。data:数据域;child:指针域,用来指向该结点的孩子...原创 2019-08-30 21:11:20 · 6836 阅读 · 0 评论 -
树的存储结构-----1---双亲表示法
双亲表示法除了根结点外,其余每个结点,它不一定有孩子,但是一定有且只有一个双亲。我们假设以一组连续空间存储树的结点,同时,在每个结点中,附设一个指示器指示其双亲结点在链表中的位置。结点结构data:数据域,存储结点的数据信息。parent:指针域,存储该结点的双亲在数组中的下标。实现由于根结点是没有双亲的,所以,约定根结点的位置域设置为-1。这样的存储结构,我们可以根据结点的...原创 2019-08-30 17:15:08 · 2725 阅读 · 0 评论 -
队列1---顺序队列---循环队列
队列队列(queue),是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的一端称为队尾,允许删除的一端称为队头。假设队列是 q=(a1,a2,......,an)q=(a_1,a_2,......,a_n)q=(a1,a2,......,an),那么a1a_1a1就是队头元素,而ana_nan就是队尾元素。队列的抽象数据类型同样是线性表,队列也有类似线性表...原创 2019-08-28 15:56:17 · 569 阅读 · 0 评论 -
栈------链式存储结构
链栈讲完了栈的顺序存储结构,现在来看栈的链式存储结构,简称为链栈。想想看,栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部?由于单链表有头指针,而栈顶指针也是必须的,所以比较好的办法是把栈顶放在单链表的头部。都已经有了栈顶在头部了,单链表中常用的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的。链栈的结构代码:/* 链栈结构 */typedef struct Stac...原创 2019-08-28 11:10:55 · 369 阅读 · 0 评论 -
栈-----两栈共享空间
其实栈的顺序存储还是很方便的,因为它只准栈顶进出元素,所以不存在线性表插入和删除时需要移动元素的问题,不过它有一个很大的缺陷,就是必须事先确定数组存储空间大小,万一不够用了,就需要编程手段来扩展数组的容量,非常麻烦。对于一个栈,我们只能尽量考虑周全,设计出合适大小的数组处理。但是,对于两个相同类型的栈,我们却可以做到最大限度地利用其事先开辟的存储空间进行操作。我们可以用一个数组来存储两个栈,...原创 2019-08-28 10:15:47 · 616 阅读 · 0 评论 -
栈---顺序栈---基本操作
#ifndef SEQUENCESTACK_C#define SEQUENCESTACK_C#include "SequenceStack.h" Status InitStack_Sq(SqStack *S){ (*S).base = (SElemType_Sq *)malloc(STACK_INIT_SIZE*sizeof(SElemType_Sq)); if(!...原创 2019-08-28 09:37:17 · 164 阅读 · 0 评论 -
线性表存储结构4------循环链表
对于单链表,由于每个结点只存储了向后的指针,到了尾标志就停止了向后链的操作,这样,当中某一结点就无法找到它的前驱结点了。将单链表中终端结点的指针端由空指针改为指向头结点,这就使整个单链表形成一个环,这种头尾相接的单链表,称为单循环链表,简称“循环链表”。为了使空链表与非空链表处理一致,我们通常设有一个头结点,当然,这并不是说,循环链表一定要有头结点。循环链表带有头结点的空链表,如图:非空...原创 2019-08-27 22:24:30 · 278 阅读 · 0 评论 -
线性表存储结构2——链式存储结构
前面我们讲的线性表的顺序存储结构,它是优缺点的,最大的缺点就是插入和删除时候需要移动大量的元素,这显然就需要耗费时间,能不能想办法解决呢?线性表的链式存储结构的特点是,用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。这就意味着,这些数据元素可以存在内存未被占用的任意位置。以前在顺序结构中,每个数据元素只需要存数据元素信息就可以了。现在在链式结构中,除了要...原创 2019-08-27 21:38:19 · 814 阅读 · 0 评论 -
线性表存储结构1——顺序存储结构
线性表的顺序存储结构,值得是用一段地址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储结构,说白了,就是在内存中找了块儿地放,通过占位的形式,把一定内存空间给占了,然后把相同数据类型的数据元素依次存放在这块空地中。既然线性表的每个数据元素类型都相同,所以可以用一维数组来实现顺序存储结构,即把第一个数据元素放在数组下标为0的位置,接着把线性表相邻的元素存储在数组中相邻的位置。线性表...原创 2019-08-27 10:56:14 · 416 阅读 · 0 评论 -
图的应用3---生成树
生成树对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树。上图所示,左边是一张连通图,右边是其对应的 2 种生成树。连通图中,由于任意两顶点之间可能含有多条通路,遍历连通图的方式有多种,往往一张连通图可能有多种不同的生成树与之对应。连通图中的生成树必须满足以下 2 个条件:包含连通图中所有的顶点;任意两顶点之间有且仅有一条通路;因此,连通图的生成树具有...原创 2019-08-24 15:40:16 · 1376 阅读 · 0 评论 -
图的应用1---单源最短路径问题
最短路径介绍最短路径问题是图论研究中的一个经典算法问题,旨在寻找图中两结点之间的最短路径。 算法具体的形式包括:确定起点的最短路径问题,即已知起始结点,求最短路径的问题。确定终点的最短路径问题,与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。确定起点终点的最短路径问题 - ...原创 2019-08-24 14:43:40 · 1223 阅读 · 0 评论 -
图
图的遍历定义图遍历又称图的遍历,属于数据结构中的内容。指的是从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。图的遍历操作和树的遍历操作功能相似。图的遍历是图的一种基本操作,图的许多其它操作都是建立在遍历操作的基础之上。由于图结构本身的复杂性,所以图的遍历操作也较复杂,主要表现在以下四个方面:在图结构中,没有一个“自然”的首结点,图中任意一个顶点都可作为第一个被访问的结点。...原创 2019-08-24 10:46:35 · 527 阅读 · 0 评论