数据结构
实战
花狗Fdog
在人之上,要把人当人,在人之下,要把自己当人。
展开
-
树形结构--二叉树的遍历算法应用(十九)
若有错误,欢迎指正批评,欢迎评论。每文一句:欲戴王冠,必承其重。哪有什么好命天赐,不都是一路披荆斩棘才换来的。原创 2020-03-22 17:40:00 · 1515 阅读 · 11 评论 -
树形结构--二叉树以及二叉树的遍历(十七)
文章目录一.二叉树1.二叉树的定义2.二叉树的性质一.二叉树1.二叉树的定义把满足以下条件的树结构称为二叉树:1.每个结点的度都不大于2.2.每个结点的孩子结点次序不能任意颠倒。2.二叉树的性质性质1:在二叉树的第k层上,最多有2^(k-1)(k≥1)个结点。性质2:深度为m的二叉树最多有2m-1(m≥1)个结点。性质3:在任意一棵二叉树中,如果其终端结点数为n0,度为2的结...原创 2020-03-20 15:29:21 · 3509 阅读 · 11 评论 -
树型结构--树的定义和基本术语(十六)
树是n(n>=0)个结点的有限集合T,当n=0时,称为空树,当n>0时,该集合满足如下条件:1.其中必有一个称为根的特定结点,它没有直接前驱,但是有零个或多个直接后续。2.其中n-1个结点可以划分成m(m>=0)个互不相交的有限集T1,T2,T3,T4.........其中Ti又是一棵树,称为根的子树,每棵子树的根结点有且仅有一个直接前驱,但有零个或者多个直接后续。1.结点:包括一个数据元素以及若干指向其他结点的分支信息。2.结点的度:一个结点的子树个数称为此结点的度。3.叶结点:度为0的结点原创 2020-03-09 16:39:18 · 2101 阅读 · 1 评论 -
线性表--定长顺序串(十四)
串,也就是字符串,是由零个字符或多个字符组成的有限序列。记为S='a1 a2 a3.....an'(n>=0),其中,S是串的名字,用单引号括起来的字符序列是串的值,每一个a都可以是字母,数字或其他字符,n是串中字符的个数,称为串的长度,n=0时的串成为空串。需要特别指出的是,串值必须使用一对单引号括起来(C语言的串是用双引号括起来的),但引号是界限符,他不属于串,只是作原创 2020-02-05 21:46:13 · 1637 阅读 · 0 评论 -
线性表--堆串(十五)
1.串的基本概念串,也就是字符串,是由零个字符或多个字符组成的有限序列。记为S = ‘a1 a2 a3…an’(n >= 0), 其中,S是串的名字,用单引号括起来的字符序列是串的值,每一个a都可以是字母,数字或其他字符,n是串中字符的个数,称为串的长度,n = 0时的串成为空串。需要特别指出的是,串值必须使用一对单引号括起来(C语言的串是用双引号括起来的),但引号是界限符,他不属于串,只是作为一...原创 2020-02-06 15:01:53 · 1661 阅读 · 0 评论 -
线性表--顺序队列 循环队列 双端队列(十三)
1.队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。2.队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端若有错误,欢迎指正批评,欢迎讨论。每文一句:人生短短几十年,不要给自己留下了什么遗憾,想笑就笑,想哭就哭,该原创 2020-02-02 14:05:41 · 1729 阅读 · 24 评论 -
线性表--链队列(十二)
1.队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。2.队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端若有错误,欢迎指正批评,欢迎讨论。每文一句:我们确实活得艰难,一要承受种种外部的压力,更要面对自己内心的困惑原创 2020-02-01 19:19:09 · 1261 阅读 · 0 评论 -
线性表--链栈(十一)
所谓链栈,就是用链表存储结构实现的栈。采用链栈,可以不事先估计栈的最大容量,只要系统有足够的空间,链栈就不会溢出,在使用完后,应与链表一样,给予相应的内存释放。若有错误,欢迎指正批评,欢迎讨论。每文一句:人生是洁白的画纸,我们每个人就是手握各色笔的画师;人生也是一条看不到尽...原创 2020-01-30 17:22:11 · 1245 阅读 · 1 评论 -
线性表--多栈共享技术(十)
栈的应用非常广泛,经常会出现一个程序中需要同时使用多个栈的情况。若使用顺序栈,会因为对栈空间大小难以准确估计,从而产生有的栈溢出、有的栈空间还很空闲的情况。为了解决这个问题,可以让多个栈共享一个足够大的数组空间,通过利用栈的动态特性来使其存储空间互相补充,这就是多栈的共享技术。在顺序栈的共享技术中,最常用的是两个栈的共享技术,名双端栈。原创 2020-01-29 22:52:39 · 1376 阅读 · 0 评论 -
线性表--单链表--循环链表--双链表--三表总结(七)
单链表就好比是一条路走到黑,无法回头,如果要访问任意结点,每次只能从头访问,也就是顺序访问,它的遍历只能是一个方向,不能后退。循环链表中没有NULL指针,涉及遍历时,终止条件不再是单链表的P!=NULL;而是判断他们是否等于某一个特定的指针,单链表只能从已知结出发,访问其后续结点,而循环链表从已知结点出发,可以访问链表中所有结点。虽然有了循环链表,但是如果数据庞大,想要得到已知结点前面的数据,再跑一圈的成本有点大,这个时候,双向链表就出来了,双向链表增加了前驱指针,它可以随心所欲,向前,或者是向后访问。原创 2020-01-27 13:29:38 · 1387 阅读 · 0 评论 -
线性表--顺序栈(九)
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。原创 2020-01-29 21:33:29 · 1246 阅读 · 0 评论 -
线性表--顺序表--静态链表(八)
前面的链表都是使用指针类型实现的,并且都是由系统提供的函数malloc和free动态实现,被称之为动态链表,像C,C++,java是拥有“指针”这类数据类型的,不需要使用静态链表,而对于BASIC,FORTRAN之类的高级语言中,并没有提供“指针”这类数据类型,若要继续采用链表作为数据的存储结构,只能采用数组来模拟实现链表,所以下面的知识是针对没有“指针”类型的高级语言而用数组设计的拥有链表存储结构的静态链表。一起往下看。原创 2020-01-28 21:28:36 · 1402 阅读 · 0 评论 -
线性表--顺序表--循环链表(五)
单循环链表,简称循环链表,是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。和单链表唯一的区别就是,尾结点指向头结点,因此循环链表中没有NULL指针。而涉及遍历操作时,其终止条件就不再是像非循环链表那样判别p或p->next是否为空,而是判别它们是否等于某一指定指针,如头指针或尾指针等,在单链表中,从一已知结点出发,只能访问到该结点及其后续结点,无法找到该结点之前的其它结点。而在单循环链表中,从任一结点出发都可访问到表中所有结点,这一优点使某些运算在单循环链原创 2020-01-24 23:42:19 · 983 阅读 · 0 评论 -
线性表--顺序表--数组(三)
线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。而且线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素。由于博主是先学习的C语言,而线性表的顺序存储结构可借助于C语言的一维数组来实现,而一维数组的下标与元素在线性表中的序号相对应。原创 2020-01-12 15:36:42 · 607 阅读 · 8 评论 -
算法复杂度(二)
算法复杂度[ 来自360百科 ]算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。应用于数学和计算机导论。同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。下面就时间复杂度和空间复杂度做出解释。时间复杂度什么是时间复杂度,一个算法的执行时间是指算法中所有...原创 2019-11-30 13:59:13 · 1212 阅读 · 11 评论 -
数据结构内容介绍(一)
据结构就是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。前辈们通过大量的实践,一点点总结出来的解决特定问题的公式。对于特定的问题,使用特点的公式,便可以为程序带来更高的运行效率和存储效率。原创 2019-11-09 22:15:33 · 1163 阅读 · 12 评论 -
线性表--顺序表--单向链表(四)
现在来讲讲单向链表,首先,链表和数组不同,数组中元素的内存地址是连续的,而链表中的元素内存地址是随机的。由于链表中的节点的数据类型是相同的,并且是随机存储,所以我们不能像数组那样只需要知道头节点就可以访问整个链表,我们必须在每个节点中存储下一个节点的地址,就好比狗链子中每一节的口子,用来连接下一节链子,只有这样,我们才能一节一节访问整个链表,讲到这里,你对链表应该有一个小的认识了吧,那么下面我们就来创建一个链表吧。原创 2020-01-14 15:49:23 · 1087 阅读 · 10 评论 -
线性表--顺序表--双向链表(六)
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。定义双向链表,原创 2020-01-26 23:36:53 · 1260 阅读 · 0 评论