![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和应用
计算机小白数据结构从0~0.1的学习记录
可乐CC+
这个作者很懒,什么都没留下…
展开
-
数据结构--5.5最小生成树(克鲁斯卡尔算法)
克鲁斯卡尔算法(Kruskal)原创 2023-09-02 15:22:26 · 50 阅读 · 0 评论 -
数据结构--5.1图的存储结构(十字链表、邻接多重表、边集数组)
边集数组是由两个一维数组构成的,一个是存储顶点的信息,另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标(begin),终点下标(end)和权(weight)组成。十字链表的好处就是因为把邻接表和逆邻接表整合在了一起,这样既容易找到Vi为尾的弧,也容易找到以Vi为头的弧,因而容易求得顶点的出度和入度。十字链表除了结构复杂一点外,其实创建图算法的时间复杂度是和邻接表相同的,因此,在有向图的应用中,十字链表也是非常好的数据结构模型。也就是说在邻接多重表里边,边表存放的是一条边,而不是一个顶点。原创 2023-08-31 14:54:39 · 1374 阅读 · 0 评论 -
数据结构--6.7多路查找树
一个结点拥有两个孩子和一个元素我们称之为2结点,它根二叉排序树类似,左子树包含的元素小于结点的元素,右子树包含的元素大于结点的元素。不过与二叉排序树不同的是,这个2结点要么没有孩子,要么孩子就应该有两个,不能只有一个孩子。——每一个非根的分支结点都有k-1个元素(关键字)和k个孩子,其中k满足:[m/2] < = k <= m。多路查找树的特点是每一个结点的孩子数可以多于两个,且每一个结点处可以存储多个元素。——Ai为指向子树根结点的指针。——如果根结点不是叶结点,则至少有两棵子树。原创 2023-09-13 14:56:51 · 33 阅读 · 0 评论 -
数据结构--7.2.1排序算法(冒泡、直接选择、直接插入)
假设含有n个记录的序列为{r1,r2,……,rn},其相应的关键字分别为{K1,K2,……,Kn},需确定1,2,3,……,n的一种排序p1,p2,p3,……,pn;使其相应的关键字满足kp1<=kp2<=kp3<=kp4<=……<=kpn非递减(或非递增)关系,即使得序列称为一个按关键字有序得序列{rp1,rp2,……,rpn},这样的操作就成为排序。在排序问题中,通常将数据元素称为记录。——显然我们输入得是一个记录集合,排序后输出的也是一个记录的集合。——所以我们可以将排序看成是线性表的一种操作。原创 2023-09-14 11:56:31 · 378 阅读 · 0 评论 -
数据结构--5.0.1图的存储结构
—图的存储结构相比较线性表与树来说就复杂很多——对于线性表来说,是一对一的关系,所以用数组或者链表均可简单存放。树结构是一对多的关系,所以我们要将数组和链表的特性结合在一起才能更好的存放。——我们的图,是多对多的情况,另外图上的任何一个顶点都可以被看作第一个顶点,任一顶点的邻接点之间不存在次序关系。——因为任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系(内存物理位置是线性的,图的元素关系是平面的)原创 2023-08-30 14:42:20 · 856 阅读 · 0 评论 -
数据结构--7.1散列表(哈希表)查找
我们要在a[ ] 中查找key关键字的记录:——顺序表查找:挨个儿查找——有序表查找:二分法查找——散列表查找记录的存储位置 = f(关键字)散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。这里我们把这种对应关系f称为散列函数,又成为哈希(Hash)函数。采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。原创 2023-09-13 16:35:39 · 231 阅读 · 0 评论 -
数据结构--6.2关键路径
在一个表示工程的带权有向图中,用顶点表示事件,用有向边上的权值表示活动表示持续时间,这种有向图的边表示活动的网,我们称为AOE网(Activity On Edge Network)。事件最晚发生时间,就是每个顶点对应的事件最晚需要开始的时间,如果超出此时间将会延误整个工期。我们把AOE网中没有入边的顶点称为始点或源点,没有出边的顶点称为终点或汇点。活动的最晚发生时间,就是不推迟工期的最晚开工时间。事件最早发生时间,就是顶点的最早发生时间。活动的最早开工时间,就是弧的最早发生时间。原创 2023-09-04 16:54:36 · 326 阅读 · 0 评论 -
数据结构体--5.0图
图(Graph)是由顶点的又穷非空集合合顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V表示图G中定点的集合,E是图G中边的集合。——线性表中我们把数据元素叫元素,树中叫结点,在图中数据元素我们则称之为定点(Vertex)。——线性表可以没有数据元素,称为空表,树中可以没有结点,叫做空树,而图中的定点集合是有穷非空的。(国外是允许空的)原创 2023-08-29 18:06:14 · 768 阅读 · 0 评论 -
数据结构--6.5二叉排序树(插入,查找和删除)
二叉排序树(Binary Sort Tree)又称为二叉查找树,它或者是一棵空树,或者是具有下列性质的二叉树:——若它的左子树不为空,则左子树上所有结点的值均小于它的根结构的值;——若它的右子树不为空,则右子树上所有结点的值均大于它的根结构的值;——它的左、右子树也分为二叉排序树(递归)。原创 2023-09-10 18:26:12 · 277 阅读 · 0 评论 -
数据结构--6.6平衡二叉排序树
【代码】数据结构--6.6平衡二叉排序树。原创 2023-09-10 21:08:59 · 33 阅读 · 0 评论 -
数据结构--6.0最短路径
在网图和非网图中,最短路径的含义是不同的。——网图是两顶点经过的边上的权值之和最少的路径。——非网图是两顶点之间经过的边数最少的路径。我们把路径起始的第一个顶点称为源头,最后一个顶点称为终点。关于最短路径的算法:1、迪杰斯特拉算法(Dijkstra)2、弗洛伊德算法(Floyd)原创 2023-09-02 17:11:47 · 1523 阅读 · 2 评论 -
数据结构--5.3图的遍历(广度优先遍历)
广度优先遍历(BreadthFirstSearch),又称为广度优先搜索,简称BFS。要实现对图的广度遍历,我们可以利用队列来实现。(参考队列)(上述为结构)原创 2023-08-31 16:40:29 · 404 阅读 · 1 评论 -
数据结构--5.2马踏棋盘算法(骑士周游问题)
国际象棋的棋盘为8*8的方格棋盘,现将“马”放在任意指定的方格中,按照“马”走棋的规则将“马”进行移动。要求每个方格只能进入一次,最终使得“马”走遍棋盘64个方格。马踏棋盘问题(又称骑士周游问题或骑士漫游问题)是算法设计的经典问题之一。原创 2023-08-31 16:14:51 · 1276 阅读 · 1 评论 -
数据结构--6.3查找算法(静态、动态)(插值查找)
从第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功;对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们在对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法来提高查找的效率。对于动态查找来说,我们则可以考虑使用二叉排序树的查找技术,另外我们还可以使用散列表结构来解决一些查找问题。动态查找:数据集合在查找的过程中需要同时添加或删除元素的查找操作。静态查找:数据集合稳定,不需要添加,删除元素的查找操作。原创 2023-09-05 23:05:25 · 517 阅读 · 0 评论 -
数据算法--7.2.2排序算法
基本有序。原创 2023-09-18 17:40:11 · 333 阅读 · 4 评论 -
数据结构--6.1拓扑排序
拓扑排序:设G=(V, E)是一个具有n个顶点的有向图,V中的顶点序列V1,V2,……,Vn满足若从顶点Vi到Vj有一条路径,则在顶点序列中顶点Vi必在顶点Vj之前。则我们称这样的顶点序列为一个拓扑序列。在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Active On Vertex Network)——从AOV网中选择一个没有前趋的顶点(该顶点的入读为0)并且输出它。——从网点删去该顶点,并且删去从该顶点出发的全部有向边。原创 2023-09-02 18:26:20 · 57 阅读 · 0 评论 -
数据结构--5.4图的遍历普利姆算法
【代码】数据结构--5.4图的遍历普利姆算法。原创 2023-08-31 17:28:48 · 75 阅读 · 0 评论 -
数据结构--树4.1
树(Tree)是n(n>=0)个结点的有限集。当n=0时称为空树,在任意一个非空树中:——有且仅有一个特定的称为根(Root)的结点;——当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、……,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。——n>0时,根结点是唯一的,坚决不可能存在多个结点。——n>0时,子树的个数是没有限制的,但它们互相是一定不会相交的。原创 2023-08-27 20:03:49 · 992 阅读 · 0 评论 -
数据结构--树4.2.3(线索二叉树)
利用中序遍历可以解决二叉树中空出来的内存,以及前驱后继的问题。——ltag为0时指向该结点的左孩子,为1时指向该结点的前驱。——rtag为0时指向该结点的有孩子,为1时指向该结点的后继。原创 2023-08-28 16:27:03 · 687 阅读 · 0 评论 -
数据结构--树4.2.4(树、森林即二叉树的相互转换(仅供参考))
判断一棵二叉树能够转换成一棵树还是森林,标准很简单,那就是只要看这颗二叉树的根结点有没有右孩子,有的话就是森林,没有的话就是一棵树。森林的遍历也分为前序遍历和后序遍历,其实就是按照树的先根遍历和后根遍历依次访问森林的每一棵树。2、对每个结点,除了保留与其长子(最左边)的连线外,去掉该结点与其他孩子的连线。1、若结点x是其双亲y的左孩子,则把x的右孩子,右孩子的右孩子,……2、将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树。树、森林的前序遍历和二叉树的前序遍历结果相同。原创 2023-08-28 19:04:16 · 1034 阅读 · 0 评论 -
数据结构--栈和队列3.1(栈-顺序结构)
栈的插入操作叫做进栈(Push),或者称为压栈、入栈。栈的删除操作叫做出栈(Pop),或者称为弹栈。栈又称为先进后出(last in first out)的后进先出原则,称为后进先出的线性表(LIFO)。栈的本质上也是一个线性表,线性表有两种存储形式,那么栈也有分为栈的顺序存储结构和栈的链式存储结构。最开始栈中不含有任何数据,叫做空栈,此时栈定就是栈底。然后数据从栈顶进入,栈顶栈底分离,整个栈的当前容量变大。数据出栈时,从栈顶移出,栈顶下一,整个栈的当前容量变小。原创 2023-08-11 13:14:19 · 558 阅读 · 0 评论 -
数据结构--递归与分治
以三层进行分析,大于三层分析情况是一样的。原创 2023-08-22 23:04:00 · 606 阅读 · 1 评论 -
数据结构--栈和队列3.2(逆波兰)
在计算一个数学式子时,如计算(3-2)+6*(2+3)时,按照我们一般的思路会优先计算括号内的算式,在计算乘法(算的快的伙伴可以同时计算)最后在将+两边的结果相加得到一个新的数值。4、输入 + ,遇到 “ + ”,计算base 和base +1 所存储的数据,对他们进行相加,输出最终结果。1、3 2 -先输入3 2,遇到“-”就对 3 2 进行减计算,存储到base(栈的最底层);2、2 3 +输入2 3,遇到 “+”就对 2 3进行加计算,存储到base+1;(仅供参考,如有问题,可私信)原创 2023-08-13 22:52:48 · 306 阅读 · 1 评论 -
数据结构--栈和队列 3.3.1循环队列
【代码】数据结构--栈和队列 3.3.1循环队列。原创 2023-08-17 20:29:28 · 588 阅读 · 0 评论 -
数据结构--栈
用栈计算逆波兰表达式的基本思路是:按顺序遍历整个表达式,若遇到操作数(假设都是二元运算符),则入栈,若遇到操作符,则连续弹出两个操作数并执行相应的运算,然后将其运算结果入栈。例如,对于表达式a*b+(c-d/e)*f,则其前缀表达式+ * ab-c/def,中缀表达式为a*b+(c-d/e)*f,后缀表达式为ab*cde/-f*+。以二元算术运算符为例,算术表达式的一般形式为s1+op+s2,则op+s1+s2为前缀表示法(也成为波兰表达式),s1+op+s2为中缀表示法,栈的一个典型应用是表达式求值。原创 2023-07-13 14:04:01 · 1102 阅读 · 0 评论 -
数据结构--线性表2-2
/realloc(*p,newsize)函数的意思是:新开一片大小为newsize的连续空间,并把以*p为首地址的原空间数据都拷贝进去。例题2:设正整数a的前驱为PRIOR(a),后继NEXT(a),用递归算法计算a+b。if(L.length>=L.listsize)//若表长超过表尺寸则要增加尺寸。//增加1个数据元素,则表长+1。原创 2023-08-03 19:01:19 · 726 阅读 · 0 评论 -
数据结构--树4.2.5(赫夫曼(Huffman)编码)
根据字符出现的频率,利用赫夫曼编码可以构造出一中不等长的二进制,使编码后的电文长度最短,且保证不产生二义性。赫夫曼编码是首个实用的压缩编码方案,即使在今天的许多知名的压缩算法里,依然可以见到赫夫曼编码的影子。——WPL(Weighted Path Length)是树中所有叶子结点的带权路径长度之和。WPL的值越小,说明构造出来的二叉树性能越优。——从根结点到该结点的路径上的连接数。——树中每个叶子结点的路径长度之和。——结点的路径长度与结点权值的乘积。原创 2023-08-28 19:47:23 · 84 阅读 · 1 评论 -
数据结构--线性表2-1
若结构时非空有限集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。可表示为:(a1,a2,a3,……,an)1,2,3,……,n:下标,即元素的序号,表示元素在表中的位置。n为元素总个数,即表长。n>=0。当n=0时,称为 空表。特点1、只有一个首结点和尾结点;特点2、除首尾结点外,其它结点只有一个直接前驱和一个直接后继。线性结构包括:线性表、堆栈、队列、字符串、数组等。其中最典型、最常用的是-----线性表。原创 2023-07-24 00:25:19 · 517 阅读 · 0 评论 -
数据结构--栈和队列3.2(中缀--》后缀)
小编第一次学,零基础,有点懵,可以的话给点参考意见 T-T.......原创 2023-08-15 19:44:19 · 338 阅读 · 0 评论 -
数据结构--栈和队列 3.3队列
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。与栈相反,队列是一种先进先出(First In First Out ,FIFO)的线性表。同时,队列也是一种重要的线性结构,实现一个队列同样需要顺序表或链表作为基础。原创 2023-08-15 20:11:45 · 321 阅读 · 0 评论 -
数据结构--树4.2(二叉树)
二叉树(Binary Tree)是n(n>0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。对一棵具有n个结点的二叉树按层序编号,如果编号为i(1原创 2023-08-27 21:00:28 · 823 阅读 · 0 评论 -
数据结构--树4.2.2(二叉树--遍历)
【代码】数据结构--树4.2.2(二叉树--遍历)原创 2023-08-28 14:36:51 · 583 阅读 · 1 评论 -
数据结构--树4.2.1(二叉树)
若树为空,则空操作返回,否则从根结点开始(注意:并不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后访问中序遍历右子树。若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。若树为空,则空操作返回,否则从左到右先从叶子后结点的方式遍历访问左右子树,最后访问根结点。若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,在前序遍历右子树。,在访问一个结点后,下一个被访问的结点面临着不同的选择。原创 2023-08-27 23:07:29 · 556 阅读 · 0 评论