![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构C语言版
爱喝水的月亮
10000hours=10years*365days*3hours
展开
-
树和二叉树【数据结构】
基本概念ADT的定义基本操作对比树形结构和线性结构基本术语以及注意事项-不能错误简单的我以为二叉树是度数小于等于2的树,而不是度为2的树,一定要记住这个概念小知识:二进制转换成为十进制的方法名称叫做位权求和法,用到的知识就是2的n次幂(n>=0)等比数列前n项和求和公式...原创 2020-06-09 01:21:37 · 140 阅读 · 0 评论 -
广义表的基本概念【数据结构】
实名广义表与匿名广义表的区别:对于匿名的广义表的表示方法我们认为一对括号就是一个广义表,里面的数据可以是广义表也可以是 原子,对于有名字的广义表,也就是大写的字母我们可以直接认为大写的就是广义表的表示方法小练习----广义表的长度一定是看一层括号就是可以的了广义表的表头和表尾广义表的表示方法状态函数------就是判断此函数是否为空啊,深度是多少,长度是多少等等注意--------广义表虽然看上去是一个线性表,但是他是一个分层次的线性表,并不是简单的线性表结构,先来分析一下两种不同的结构-------原创 2020-06-08 23:04:44 · 904 阅读 · 1 评论 -
最小生成树【数据结构】
前提【1】网的最小生成树,涉及到生成树了那么就会有最小的权值在里面了【2】对于一个图来说生成树是由多个的,并不是唯一的【3】:广度优先算法的遍历是可以得到生成树的,深度优先算法也是可以得到生成树的任意的一个联通网,如果我们想构建最小生成树,假设我们把所有节点分成两个集合,我们知道,建成的最小生成树的节点之间一定是联通的思路:以某一个点出发来逐渐的扩大,扩大的思路,就是两个集合中间最小的一条边一定是最小生成树的一条边...原创 2020-06-08 00:42:22 · 316 阅读 · 0 评论 -
图的遍历算法【数据结构F】
图的遍历算法有哪两种?深度优先调度算法---------将图结构看成是树形结构,树形结构的子图直接是没有交叉的,但是对于图结构的树形结构之间是有交叉的,类比于树形结构的二叉树,左指数和右指数都会相应的经历三次,为了区分我们加了标志变量,我们需要给每一个顶点都加一个标志变量,这个变量的作用就是为了描述此顶点是否已经被访问过,如果这个点被访问的了,而且之前没有被访问过,那么我们就开始进行访问,否则我们不访问,对于图形结构来说,每个顶点被经过的次数是不确定的,广度优先调度算法,接下来我们在纸上画一个空的队列,描原创 2020-06-08 00:17:57 · 277 阅读 · 0 评论 -
图的基本概念【数据结构】
序言1对1的线性结构,一对多的树二叉树以及森林,第3种就是多对多的结构,也就是我们所要讲到的图的结构,图形结构是数据结构当中最复杂的一种结构,图形结构的特点就是在这个图当中任意两点之间都会有关系,这里的关系指的是可能会有关系,因为不是一对多也不是1对1,所以没有办法区分层次和顺序了,图上的顶点与顶点之间,我们可以认作是平等的,那我们如何去描述图形结构?在这里我们会提到两个概念,一个是顶点集,一个是弧集,在这里要区分弧跟边儿的概念,对于前面1对1和一对多的关系,我们是可以用数据来进行描述它们之间的关系的原创 2020-06-07 23:07:48 · 816 阅读 · 1 评论 -
数据的存储特殊矩阵压缩存储【数据结构F】
以行为主序以列为主序矩阵的前提分类 三角矩阵原创 2020-06-07 07:58:47 · 142 阅读 · 0 评论 -
数组【数据结构】
前提数组的定义以及数组的延伸这种不好进行理解,那么我们下面以二维数组进行解释多维数组的数据特点存储数组结构的两种方式问题抽象总结原创 2020-06-06 22:06:13 · 95 阅读 · 0 评论 -
KMP
原创 2020-06-06 16:11:48 · 129 阅读 · 0 评论 -
图【数据结构F笔记】
原创 2020-06-05 18:43:22 · 111 阅读 · 0 评论 -
串的定长存储表示【数据结构】
原创 2020-06-01 17:40:43 · 170 阅读 · 0 评论 -
串【数据结构F】
先来讲解一下串结构的概念性质的东西,以及我们需要注意的一些问题串结构简单的ADT以及一些基本的操作最小操作函数:就是功能已经达到了最小的功能实现了,不能继续执行更大的功能,类似于我们在家盖房子一样,水泥的功能是坚固的作用,...原创 2020-05-30 10:08:33 · 187 阅读 · 0 评论 -
队列【数据结构】
注意我们的销毁队列是否能够成功取决申请空间的方式,动态申请出来的空间都是可以进行销毁的,对于静态的话是不能直接进行销毁的ADT相当于是c++当中的类结构,是处理数据时,提前对数据进行一定的管理操作,就是将某一件事物所包含的一系列特性进行整理规定操作,比如对于学生来说,学生的学号以及姓名,班级,专业都是一个学生应该具备的属性,我们把这些属性都封装在一个类当中,方便我们进行调用数据结构的特点注重的是数据之间的关系和数据之间月因为存在这样的关系,所存在的功能,和语言有本质的区别队列的入队列.原创 2020-05-29 18:14:15 · 148 阅读 · 0 评论 -
栈结构的总结【数据结构F】
栈结构的一些实例理解原创 2020-05-28 23:59:09 · 112 阅读 · 0 评论 -
栈结构功能实现的伪码展示【数据结构F】
原创 2020-05-28 18:21:20 · 244 阅读 · 0 评论 -
栈的简单介绍以及栈结构的ADT【数据结构】
几种基本的栈结构操作原创 2020-05-28 16:19:53 · 362 阅读 · 0 评论 -
链表最终总结【数据结构】
原创 2020-05-27 23:18:49 · 101 阅读 · 0 评论 -
双向循环链表【数据结构】
单链表的缺点以及对单链表缺点的改进和双向链表的理解操作双向循环列表的插入操作线性结构是一种逻辑结构,顺序存储结构,链式存储结构原创 2020-05-27 23:11:08 · 161 阅读 · 0 评论 -
数据结构【插入操作具体代码的实现】
插入操作具体代码的实现单链表delete的操作:原创 2020-05-27 21:58:10 · 682 阅读 · 0 评论 -
链表的代码实现【数据结构F】
单链表的特点:每次结点的分配都是动态进行分配的,melloc函数实现的功能是开辟一块新的内存空间,但是返回的是一个地址,只能是地址,没有别名的事情,那就有点难办了,这是一种间接的寻址,不像数组那样,可以通过名字进行直接寻址,间接寻址就是必须找到第一个元素的位置,通过第一个元素的位置,依次寻找其余元素的位置,很是不方便的,用一个指针变量来记录开辟的那一块地址空间,没有办法,说是把他赋予一个新的别名,也就是说节点没有别名,位序:位序在单链表当中是比较模糊的概念,位序不像是角标一样,有单独的存储空间,很方便..原创 2020-05-26 18:39:24 · 138 阅读 · 0 评论 -
单链表的实现【数据结构】
思考:1.是否能够将原来指针的方向改为向前指向呢?2.是否能够有两个指针域的操作呢?了解:单链表是应用最广泛的一种形式,还有双向链表以及循环链表,这些都是要进行讨论的结构体定义的是什么?结构体定义的是单链表的结点所包含的内容,包括数据域以及指针域,结构一旦发生了变化,那么单链表的讨论就要发生变化管理单链表的两种思考角度是什么?第一种就是将单链表看作是一个整体,第二种就是将单链表看作是一个结点一个结点的串联形式单链表的头指针一般不能进行修改:在进行重定义的时候,通常你会发现带有LIST的名.原创 2020-05-26 16:16:14 · 275 阅读 · 0 评论 -
链表的形式【F】
数据元素之间的关系在计算机中有两种表示方法:顺序映象, 非顺序映象.对应两种存储结构:顺序存储结构, 链式存储结构线性结构就是一种逻辑关系,方便我们对数据进行研究但是不考虑真实的存储结构数据是什么?数据是能够反应一定内容的一组数据类型的组合对于动态分配的空间是没有别名的,因为没有别人,我们也不能使用&符号,之前我们都是通过数组名来获取第一个元素的首地址,但是,动态分配内存不给你名字,只是给你一块空地,当你离开的时候就找不到了,就像是我们去一个餐厅吃饭,如果对方告诉我们名字,我们就可原创 2020-05-25 23:53:12 · 308 阅读 · 0 评论 -
顺序结构实现【数据结构】
虽然在数据结构当中是先出现的线性表,然后出现的是数组一:线性表的顺序存储结构顺序映象:用一组地址连续的存储单元依次存放线性表当中的数据元素线性表的起始地址:线性存储第一个数据元素的地址,我们也称作是基地址我们知道,在我们定义数组的时候,数组名就是第1个元素的地址,我们可以利用数组名,对线性表进行简单的操作,因为我们一旦定义了数组名就相当于知道了线性表的起始地址,从而可以迅速的访问到线性表,对线性表进行一系列的操作以存储位置相邻来表示有序对<ai-1,ai>,我们都知道,尖括号代表的是有顺序的存储原创 2020-05-25 09:23:05 · 687 阅读 · 0 评论 -
线性结构基本概念【数据结构】F
线性表的概念:线性表是一种最简单的线性结构,线性结构是单个数据元素的有序结合线性结构的基本特征为:第一,集合中必存在唯一的一个第1元素,第二,集合中必存在唯一的一个最后元素,第三,除最后元素外均有唯一的后继,第四,除第1元素之外,仅有唯一的前驱,序偶关系:就是有顺序尖括号带便两个数据之间是有顺序的,不能进行数据之间的调换的,是序偶关系的,圆括号代表的是两个之间是一组,没有顺序的脚标是从1进行的,要注意进行区分学习线性表要类比类进行比较,类具有成员变量以及成员方法,那么实现功能的是成原创 2020-05-24 00:51:01 · 2087 阅读 · 0 评论 -
一元多项式的表示和相加【数据结构】
一元多项式的表示和相加运算只是一个定义,一切的一切,到最后都必须归咎于存储结构当中,实现物理存储,一元多项式包括数据对象数据关系以及数据之间的各种操作,一元多项式的实现:用带表头结点的有序链表表示多项式节点的数据元素类型定义为:项的表示:typedefsturct系数:float ceof指数:int expn一提到多项式我们的脑海当中就要浮现出两个特点:不确定性和变化太大,因此不能使用预分配的操作进行数据的存储,应该使用动态的分配空间进行分配使用多项式当中应该注意的是不能出像两个相同的项数原创 2020-05-23 21:52:27 · 709 阅读 · 0 评论 -
【数据结构】线性表大咖
循环链表的介绍概念:链表的最后一个节点的指针,由原来的 空指针变成指向第1个节点的链表。类比:我们进行串珠子的操作,将首尾通过线进行连接,同样我们的链表就是通过指针指向的方式进行连接,使其成为一个圈链表的判断:后继是否为空结点双项链表:在每个节点中有两个指针,其中一个指向直接后继,另一个指向直接前继好处:弥补了单链表,只能向前走的缺点增加了指向前驱的指针循环链表细说应该是分成循环单链表以及循环双链表,单双链表指的是指针的个数,如果是一直向后进行指向的,那么就是单链表,如果是双向的那么就是双原创 2020-05-23 17:18:27 · 114 阅读 · 0 评论 -
insert函数的修改,
我们来看一下图片当中的第2个圆圈,为什么使用size来相加呢?我们知道一开始我们定义的初始空间为init_size;我们想一下啊,如果是第1次进行空间的增加,那么我们使用InIt来进行相加是可以的,但是当第2次想加我们再想开辟空间的时候,还使用初始空间大小,加上我们所要开辟的空间大小是不可以的,因为第1次已经改变了,原来空间的大小应该用的是第2次的空间大小加上后来一次空间的大小,所以此处呢,我们应该使用的是一个变量加常量的方式,而不是两个常量之间相加,想家之后呢,我们需要把新的首地址赋值给指针变量,实现.原创 2020-05-19 15:33:27 · 509 阅读 · 0 评论 -
数组名与指向数组的指针之间的联系与区别【数据结构】
我们遇到一个非常棘手的问题,这个问题就是,对于一堆数据来说,我们进行存储,放到一个指定的仓库当中,先前我们使用数组加加标的形式进行访问仓库当中的元素位置,但是呢,现在我们使用的是一个指针结构,指针指向的是一个地址,同时使用函数malloc进行空间的开辟,但是当我们需要仓库当中的元素时,我们应该如何拿出来使用?接下来我们来学习一下指向数组的指针以及数组名之间的区别与联系解释:我们一再强调数组名就是元素的首地址,也就是数组加角标的形式,他本身就带着自己的首地址,这就相当于是我们去一个地方聚餐,第1种情况我们认原创 2020-05-19 14:55:37 · 428 阅读 · 0 评论 -
返回地址【数据结构】
小问题?1.我们是如何根据地址值来找到我们对应的数据的?详细陈述一下:当我们开辟一个整数类型,取名为a,假设地址空间是从数值为2000进行存储,并且我们假设整形占用4个字节,那么我们在内存中需要的空间就是2000~2003,共4个字节,同时我们定义一个整形的指针为p,p存储的地址就是a的地址,我们写作是int p;p=&a;就相当于是p==2000,这如何来确定地址空间当中所存的具体数值呢?我们用int 2000来进行确定的,我们开始假设的是整形占用4个字节,并且起始地址是从2000开始的,那么原创 2020-05-19 14:24:31 · 1501 阅读 · 0 评论 -
首元节点
线性表的链式表示和实现:1.区分一个概念:头结点 头指针 首元节点首元节点:就是线性表(这里为什么说是线性表,而不说是链表呢?因为我们先来讲清楚首元节点的概念,不涉及指针)当中第一个节点头指针:头指针是指向首元节点地址的指针头结点:头结点并不是我们理解的线性表当中第一个元素的数据加上指向第二个数据地址的指针,而是我们指向第一个节点前面的一个节点。这个节点的数据部分可以是任意的,是不受限制的...原创 2020-04-27 15:46:16 · 2050 阅读 · 0 评论