![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
大话数据结构
我叫向同学
永远不要停下前进的脚步
展开
-
【数据结构】详解多路查找树之2-3树
文章目录概念2-3树2-3树的插入实现2-3树的删除实现测试代码概念我们之前学习的树,都是一个结点可以有多个孩子,但是自身只存储一个元素。二叉树的限制会更多,节点最多只能有两个孩子。一个结点只能存储一个元素,在元素非常多的时候,就使得要么树的度非常大(结点拥有子树的最大值),要么树的度非常大,甚至两者都必须足够大才行,这就使得内存存取外存次数非常多,这显然成了时间效率上的瓶颈,这迫使我们要打破每一个结点只存储一个元素的限制,为此引入了多路查找树的概念。多路查找树(muitl-way search t原创 2020-10-04 13:10:47 · 718 阅读 · 0 评论 -
【数据结构】之平衡二叉树(AVL树)的实现
文章目录标题概念实现原理实现算法总结测试代码标题概念平衡二叉树(Balanced Binary Tree),是一种二叉树排序树,其中每一个结点的左子树和右子树的高度差至多等于1。平衡二叉树,顾名思义,他是一种高度平衡的二叉树。那么高度平衡是什么意思了?它要么是一颗空树,要么他的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过一。我们将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF(Balance Factor)。那么平衡二叉树上所有结点的平衡因子只可能是-1,0和1原创 2020-10-03 13:12:02 · 552 阅读 · 1 评论 -
【数据结构】之二叉排序树的实现(C语言)
文章目录二叉排序树二叉排序树的查找操作二叉排序树的插入操作二叉排序树的删除操作总结如果我们要查找的数据集是有序线性表,并且是顺序存储的,查找可以用折半,插值,等查找算法来实现。可惜,因为有序,在插入和删除操作上,就需要耗费大量的时间。有没有一种既可以使得插入和删除的效率不错,又可以比较高效率的实现查找的算法呢?二叉排序树二叉排序树,又称为二叉查找树。它或者是一颗空树,或者是具有下列性质的二叉树。若他的左子树不为空,则左子树上所有结点的值均小于他的根节点的值。若他的右子树不为空,则右子树上所有结原创 2020-10-01 11:29:54 · 996 阅读 · 0 评论 -
【数据结构】之线性索引查找的实现(C语言)
数据结构的目的就是提高数据的处理速度,索引视为了加快查找速度而设计的一种数据结构。索引就是把一个关键字与它对应的记录相关联的过程,一个索引由若干个索引项组成,每个索引项至少应包含关键字和其对应的记录在存储器中的位置等信息。索引技术是组织大型数据库以及磁盘文件的一种重要技术。稠密索引稠密索引是指在线性索引中,将数据集中的每个记录对应一个索引项。如图1-1所示。图1-1对于稠密索引这个索引表来说,索引项一定是按照关键字有序的排列。索引项有序也就意味着,我们要查找关键字时,可以用到折半,插值,裴波纳契原创 2020-09-30 11:31:00 · 1069 阅读 · 0 评论 -
【数据结构】有序表查找及实现
折半查找折半查找(Binary Search),又称为二分查找。它的前提就是U是线性表中的记录必须有序的,线性表必须采用顺序存储。折半查找的基本思想:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大雨中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。/* 折半查找 */int Binary_Search(int *a,int n,in原创 2020-09-29 12:56:36 · 1193 阅读 · 0 评论 -
【数据结构】之顺序表查找
目录概念顺序表查找算法顺序表查找优化总结概念顺序查找又叫线性查找,是最基本的查找技术,他的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若记录的关键字和给定值相等,则查找成功,找到所查的记录;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找失败。顺序表查找算法//a为数组,n为要查找的数组个数,key为要查找的关键字int Sequential_Search(int *a,int n,int key){ int i;原创 2020-09-28 18:06:48 · 4558 阅读 · 1 评论 -
【数据结构】之图的遍历(C语言)
文章目录定义深度优先遍历定义从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历(Traversing Graph)。深度优先遍历深度优先遍历(Depth_First_Search),也有称深度优先搜索,简称DFS。...原创 2020-07-16 12:31:15 · 11623 阅读 · 6 评论 -
【数据结构】图的存储结构之十字链表的创建(C语言)
定义对于有向图图来说,邻接表是有缺陷。关心了出度问题,想了解入度就必须要遍历整个图才可以知道,反之,逆邻接表解决了入度却不了解出度的情况。有没有可能把邻接表与逆邻接表结合起来呢?答案是肯定的,就是把它们整合在一起、这就是有向图一种存储方法:十字链表定义顶点结构如图1-1所示。图1-1firstin表示入边表头指针,指向该顶点的入边表中第一个结点,firstout表示出边表头指针,指向该顶点的出边表中的第一个结点。边表结点结构如图1-2所示。图1-2tailvex是指弧起点在顶点表的下标,hea原创 2020-07-11 19:33:33 · 990 阅读 · 0 评论 -
【数据结构】最短路径_Dijkstra的创建(C语言)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXEDGE 20#define MAXVEX 20#define INFINITY 65535typedef int Status; /* Status是函原创 2020-07-09 22:17:05 · 196 阅读 · 0 评论 -
【数据结构】图的存储结构之邻接表(C语言)
我们把数组与链表相结合的存储方法称为邻接表(Adjacency List)。邻接表的处理办法是这样的:图中顶点用一个一维数组存储,当然顶点也可以用单链表来存储,不过数组可以较容易地读取顶点信息,更加方便。另外,对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的指针,以便以查找该顶点的信息。图中每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不定,所以用单链表存储,无向图称为顶点vi的边表,有向图则称为顶点vi作为弧尾的出边表。如图1-1就是一个无向图的邻接表结构。图1-1.从图原创 2020-07-08 20:29:08 · 4448 阅读 · 5 评论 -
【数据结构】最小生成树Kruskal的实现(C语言)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */#define MAXEDGE 20#define MAXVEX 2原创 2020-07-08 12:47:17 · 407 阅读 · 0 评论 -
【数据结构】最小生成树Prim的实现(C语言)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXEDGE 20#define MAXVEX 20#define INFINITY 65535typedef int Status; /* Status是函原创 2020-07-08 12:46:06 · 369 阅读 · 0 评论 -
【数据结构】图的存储结构之邻接矩阵(C语言)
定义图的邻接矩阵(Adjacency Matrix)存储方式使用过两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。我们来看一个实例,图1-1的左图就是一个无向图。图1-1我们设置两个数组,顶点数组为vertex[4]={v0,v1,}v2,v3} ,边数组arc[4][4],如图1-1的右图这样的一个...原创 2020-07-07 12:17:27 · 5653 阅读 · 2 评论 -
【数据结构】之邻接表的创建(C语言)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXVEX 100 /* 最大顶点数,应由用户定义 */typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 *原创 2020-07-03 09:13:14 · 3050 阅读 · 0 评论 -
【数据结构】之邻接矩阵的创建(C语言)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXVEX 100 /* 最大顶点数,应由用户定义 */#define INFINITY 65535typedef int Status; /* Status是函原创 2020-07-03 09:12:24 · 936 阅读 · 0 评论 -
【数据结构】之图的定义
定义图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中G表示一个图,V是图G中顶点的集合,E是图G中边的集合。注意点:线性表中我们把数据元素叫做元素,树中将数据元素叫结点,在图中数据元素称之为顶点(Vertxt)。线性表中可以没有数据元素,称为空表。树中可以没有结点,叫做空树。那么对于图呢?在图结构中,不允许没有顶点。在定义中,若V是顶点的集合,则强调了顶点集合V有穷非空。线性表中,相邻的数据元素之间具有线性关系,树结构中,相邻两层的结点具有层次关系,在原创 2020-07-02 12:50:08 · 3020 阅读 · 0 评论 -
【数据结构】二叉树链式结构实现(C语言)
#include "string.h"#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100 /* 存储空间初始分配量 */typedef int Status; /* Status是函数的类原创 2020-06-28 13:33:22 · 2236 阅读 · 0 评论 -
【数据结构】二叉树顺序结构实现(C语言)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100 /* 存储空间初始分配量 */#define MAX_TREE_SIZE 100 /* 二叉树的最大结点数 */typedef int S原创 2020-06-28 13:32:12 · 815 阅读 · 0 评论 -
【数据结构】图解 树,森林与二叉树的转换
前言在说树的结构时,我提到了树的孩子兄弟法可以将一棵树用二叉链表进行存储,所以借助二叉链表,树和二叉树可以相互进行转换。从物理结构看,他,他们的二叉链表也是相同的,只是解释不一样而已。因此只要设定一定的规则,用二叉树来表示树,甚至表示森林都是可以的,森林与二叉树也可以相互进行转换树转换为二叉树步骤:加线:在所有兄弟结点之间加一条线。去线:对树中每个结点,只保留它与第一个孩子结点的连线,删除它与其他孩子结点之间的连线。层次调整:以树的根结点为轴心,将整棵树顺时针旋转一定的角度,将整棵树一定的角度原创 2020-06-28 13:30:29 · 5932 阅读 · 3 评论 -
【数据结构】线索二叉树的实现(C语言)
线索二叉树原理观察图1-1,发现指针域并没有被充分利用,有许许多多的 ^ 也就是空指针域的存在,应该想办法利用起来。图1-1首先我们要来看一下这空指针有多少个呢?对于一个有n个结点的二叉链表,每个结点指向左右孩子的两个指针域,所以一共是2n个指针域。而n个结点的二叉树一共有n-1条分支线,也就说说,其实是存在2n-(n-1)=n+1个空指针域。比如图1-1有10个结点,而带有“^”空指针域为11,这些存储空间不存储任何事物,白白的浪费着内存的资源。另一方面,我们在做遍历时,比如对图1-1做了中序遍原创 2020-06-23 21:31:24 · 688 阅读 · 0 评论 -
【数据结构】遍历二叉树的方法(C语言)
文章目录二叉树遍历原理二叉树遍历方法前序遍历中序遍历中序遍历算法后序遍历后续遍历算法层序遍历二叉树遍历的性质二叉树遍历原理二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。两个关键字:“访问”和“次序”。访问其实是要根据实际的需要来确定具体做什么,比如对每个结点进行相关计算,输出打印等,它算作是一个抽象操作等。在这里我们可以简单的假设就是输出结点的数据信息。二叉树的遍历次序不同于线性结构,最多也就是从头到尾,循环,双向等简单的遍历方式。树的结原创 2020-06-20 15:36:48 · 2973 阅读 · 0 评论 -
【数据结构】图解二叉树的存储结构
文章目录二叉树的顺序存储结构二叉链表二叉树的顺序存储结构二叉树的存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,比如双亲与孩子之间的关系,左右兄弟之间的关系等。首先看一下完全二叉树的顺序存储,一颗完全二叉树如图1-1所示。图1-1将这颗二叉树存入到数组中,相应的下标对应其同样的位置,如图1-2所示。图1-2这下看出完全二叉树的优越性了吧。由于它定义的严格,所以用顺序结构也可以表现出二叉树的结构来。当然对于一般的二叉树,尽管层序编号不能原创 2020-06-20 13:34:02 · 17334 阅读 · 0 评论 -
【数据结构】之二叉树的5个性质
文章目录二叉树性质1二叉树性质2二叉树性质3二叉树性质4二叉树性质5二叉树性质1性质1:在二叉树的第i层上至多有2i-1个结点(i>=1)。如图1-1的二叉树。第一层的结点是根结点,只有一个,所以21-1 = 20=1。第二层有两个结点,所以22-1 = 21=2。第三层有四个结点,所以23-1 = 22=4。第四层有八个结点,所以24-1 = 23=8。图1-1通过数据归纳法的论证,可以很容易得出在二叉树的第i层上至多有2i-1(i>=1)个结点的论证。二叉树性质2性质2原创 2020-06-19 18:46:21 · 16413 阅读 · 4 评论 -
【数据结构】之 二叉树的定义理解
定义二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点的两棵互不相交的,分别称为根结点的左子树和右子树的二叉树组成。图1-1就是一个二叉树。图1-1特点每个结点最多有两个子树,所以二叉树中不存在度大于2的结点。注意不是只有两棵子树,而是最多有。没有子树或者有一颗子树都是可以的。左子树和右子树是有顺序的,次序不能任意颠倒。打个比方,人的双手,双脚,显然左手和右手是不一样的。即使树中某结点只有一棵子树,也要区分它是左子树还是原创 2020-06-18 15:59:47 · 1057 阅读 · 0 评论 -
【数据结构】树的存储结构(C语言)
文章目录双亲表示法孩子表示法孩子兄弟表示法利用顺序存储结构和链式存储结构的特点,完全可以实现对树的存储结构的表示。介绍三种不同的表示方法:双亲表示法,孩子表示法,孩子兄弟表示法。双亲表示法假设一组连续的空间存储树的特点。同时在每个结点中,附设一个指示器指示双亲结点到链表中的位置。 也就是说,每个结点除了知道自己是谁以外,还知道他的双亲在哪里,他的结点结构图1-1所示。图1-1其中data是数据域,存储结点的数据信息。而parent是指针域,存储该结点的双亲在数组中的下标。//树的双亲表示法结点结原创 2020-06-17 18:24:25 · 1884 阅读 · 0 评论 -
【数据结构】之树的定义
定义定义:树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,……Tm,其中每一个结点本身又是一棵树,并且称为根的子树(SubTree),如下图所示1-1图1-1树的定义其实就是栈的递归方法。也就是在树的定义中还用到了树的概念,图1-2的子树T1和子树T2就是根结点A的子树。当然D,G,H,I组成的树又是B为结点的子树,E,J组成原创 2020-06-13 19:03:57 · 1674 阅读 · 0 评论 -
数据结构】图解KMP模式匹配算法(C语言)
介绍KMP算法是有Kunth和Partt共同研究,Morris独立研究发表的模式匹配算法,可以大大避免重复遍历的情况,我们把它称之为克努特-莫里斯-普拉特算法,简称KMP算法。KMP模式匹配原理从朴素模式匹配的角度理解KMP模式匹配假设主串S=“abcdefgab”,子串 T=“abcdex”,如果用朴素算法的话,前5个字母,两个串完全相等,直到第六个字母,“f”与“x”不相等。如下图所示图1-1接下来,按照朴素模式匹配,应该是图1-1的流程23456。即主串S中当i=2,3,4,5,6时,首字原创 2020-06-10 22:58:21 · 1295 阅读 · 2 评论 -
【数据结构】图解串的朴素模式匹配(C语言)
模式匹配:子串定位运算,在主串中找出子串出现的位置。假设我们要从下面的主串S=“goodgoogle”中,找到T=“google”这个子串的位置。我们通常需要下面的步骤。1、主串S第一位开始,S与T前三个字母匹配成功,但是S第四个字母是d而T的是g。第一位匹配失败。下图所示,其中竖直连线表示相等,闪电状弯折线表示不相等。![在这里插入图片描述](https://img-blog.csdnimg.cn/20200609102122902.png )2、主串S第二位开始,主串S首字母是o,要匹配的T首字原创 2020-06-09 12:09:50 · 485 阅读 · 0 评论 -
【数据结构】串的定义
定义串(String)是由零个或者多个字符组成的有限序列,又名叫字符串。一般记为s=“a1a2……an”(n>=0)其中s是串的名称,用双引号括起来括起来的字符序列是串的值,引号不属于串的内容。ai(1=< i <=i)可以是字母,数字或者其他字符,i就是该字符在串中的位置。串中的字符数目n称为串的长度,定义中谈到有限是指长度n是一个有限的数值。零个字符的串称为空串(null string),它的长度为零,可以直接使用双引号表示,所谓的序列,说明串的相邻字符之间具有前驱和后继的关系。原创 2020-06-08 12:36:33 · 2218 阅读 · 0 评论 -
【数据结构】之队列的链式存储结构及实现(C语言)
文章目录概念入队操作出队操作总结测试代码概念队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把他简称为链队列。为了操作方便,我们将队的头指针指向链队列的头结点,而队尾指针指向终端结点。空队列时,front和rear都指向头结点。链队列的结构为:typedef int QElemType; //QElemType根据实际情况定,这里设为inttypedef struct QNode //结点结构{ QElemType data; struct QNode原创 2020-06-07 11:33:44 · 2052 阅读 · 0 评论 -
【数据结构】之循环队列的实现(C语言)
文章目录顺序存储队列的缺点循环队列定义顺序存储队列的缺点我们假设一个队列有n个元素,则顺序存储的队列需建立一个大于n的数组,并把队列的所有元素存储在数组的前n个单元,数组下标为0的一端即时对头,所谓的入队操作,其实就是在队尾追加一个元素,不需要移动任何元素。与栈不同的是,队列出队元素是在对头,即下标为0的位置,那也就意味着,队列中所有的元素都得向前移动,以保证队列的对头,也就是下标为0的位置不为空。为了避免当只有一个元素时,队头和队尾重合使处理变的麻烦,所以引入两个指针,front指针指向对头元素,原创 2020-06-05 13:28:08 · 1577 阅读 · 4 评论 -
【数据结构】栈的应用——递归(裴波那切数列)
文章目录引言裴波那切数列的实现(Fibonacci)递归定义递归和栈的关系引言栈有一个很重要的应用:在程序设计语言中实现了递归,那么什么是递归了?当你往镜子前面一站,镜子里面就有一个你的像。但你试过两面镜子一起照吗?如果A,B两面镜子相互面对面放着,你往中间一站,两面镜子都有你的千百个化身。为什么会有这种现象呢?原来,A镜子里有B镜子的像,B镜子里也有A镜子的像,这样反反复复,就会产生一连串的“像中像”。这是一种递归现象。裴波那切数列的实现(Fibonacci)假如兔子在出生两个月候,具有繁殖能力原创 2020-06-03 11:25:19 · 568 阅读 · 0 评论 -
【数据结构】栈的链式存储的实现(C语言)
文章目录概念进栈操作出栈操作总结完整代码概念栈的链式存储结构,简称为链栈。栈只是用栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那为什么不他们合二为一了,所以比较好的办法就是把栈顶放在单链表的头部。另外,已经有了栈顶在头部 了,单链表中比较常用的头结点也失去了意义,通常对于栈链来说,是不需要头结点的。对于栈链来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间,如果真的发生,那此时的计算机操作系统已经面临死机崩溃的情况。而不是这个栈链是否溢出的原创 2020-06-02 09:41:05 · 603 阅读 · 0 评论 -
【数据结构】之两栈共享空间(C语言)
文章目录引言实现之两栈共享空间插入元素删除元素完整代码引言栈的顺序存储还是很方便的,因为它只准栈顶进出元素,所以不存在线性表插入和删除时需要移动元素的问题。不过栈有一个比较大的缺陷,就是必须事先确定数组存储空间的大小。万一不够用,就需要手动编程来扩展数组的容量,非常麻烦。对于一个栈,我们也尽可能考虑周全,设计出合适大小的数组来处理,单相对于两个相同类型的栈,我们却可以做到极大限度的利用其事先开辟的存储空间来进行操作。打个比方,两个大学室友毕业同时到北京工作,开始时,他们觉得住了这么多年学校的集体宿舍,原创 2020-06-01 10:22:38 · 3075 阅读 · 0 评论 -
数据结构之栈的顺序存储结构及实现(C语言)
文章目录概念进栈出栈变化形式栈的顺序存储结构进栈操作出栈操作顺序栈代码概念栈(stack)是限定仅在表头和表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last in First Out)的线性表,简称LIFO结构。理解:首先栈是一个线性结构,也就是说栈元素具有线性关系,即前驱后继关系。只不过栈是一种特殊的线性表而已。它的特殊之处就在于限制了这个线性表的插入和删除的位置,它始终只在栈顶原创 2020-05-30 11:12:15 · 4121 阅读 · 0 评论 -
数据结构之双向链表的实现(C语言)
文章目录概念插入元素删除操作总结概念在单链表中有了next指针,这就使得我们要查找的下一结点的时间复杂度为O(1)。可是如果我们要查找的是上一结点的话,那么最坏的时间复杂度就是O(n),因此我们每次都要从头遍历开始查找。为了克服单向性这一缺点,设计出了双向链表(double linked list)是在单链表的每个结点中,在设置一个指向其前驱结点的指针域。 所以在双链表中的结点都有两个指针域,一个指向直接后继,另一个指向直接前驱。//线性表的双向链表的存储结构typedef struct DulN原创 2020-05-28 18:12:14 · 623 阅读 · 0 评论 -
数据结构之循环链表的创建(C语言)
概念将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环。这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)循环链表带有头结点的空链表非空的循环链表其实循环链表和单链表的主要差异就是在循环的判断条件上,原来是判断p->next是否为空,现在是p->next不等于头结点,则循环结束。不使用头指针,使用指向终端结点的尾指针表示循环链表,此时查找开始结点和终端结点就比较方便。上图所示,终端结点使用尾指针rear指示,则查找原创 2020-05-27 11:53:20 · 2119 阅读 · 0 评论 -
数据结构之静态链表的创建(C语言)
什么是静态链表首先我们让数组的元素都是由两个数据域组成的,data和cur。也就是说,数组的每个下标都对应一个data和一个cur。数据域data,用来存放元素,cur相当于单链表或中的next指针,存放该元素的后继在数组中的下标,我们把cur称为游标。我们把这种用数组描述的链表叫做静态链表,这种描述方法还有起名叫做游标实现法。为了方便插入数据,我们通常会把数组建立的大一些,以便有一些空闲空间编译插入是不至于溢出。/* 线性表的静态链表存储结构 */#define MAXSIZE 1000typ原创 2020-05-26 11:34:16 · 1034 阅读 · 0 评论 -
单链表的整表创建(C语言)
文章目录单链表整表创建思路头插法尾插法单链表的整表删除创建单链表的过程就是一个动态生成链表的过程。即从空表的初始化状态,依次建立各元素的结点,并逐个插入链表。单链表整表创建思路1、声明一指针p和计数器变量i。2、初始化一空链表L。3、让L的头结点的指针指向NULL,即建立一个带头结点的单链表4、循环:生成一个新结点赋值给p。随机生成一数字赋值给p的数据域p->data。将p插入到头结点与前一新结点之间。头插法就是始终让新结点在第一的位置。/*随机产生n个元素的值,建立带表原创 2020-05-25 18:03:50 · 1004 阅读 · 0 评论 -
数据结构之线性表的链式存储结构(C语言)
引言线性表的顺序存储结构,它是有缺点的,最大的缺点就是插入和删除时需要移动大量的数据元素,这显然需要耗费时间。线性表链式存储结构定义特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的。也可以是不连续的。这就意味着这些数据元素可以存在内存内存未被占用的任意位置。在顺序存储结构中,每个数据元素只需要存储数据元素信息就可以了。现在链式结构中,除了要存储数据元素信息之外,还要存储它的后继元素的存储地址。为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对元素ai来说原创 2020-05-25 13:12:33 · 1850 阅读 · 0 评论