数据结构
文章平均质量分 66
PayYingJAY
这个作者很懒,什么都没留下…
展开
-
两张图理解迪杰斯特拉算法
1.思想:迪杰斯特拉最最朴素的思想就是按长度递增的次序产生最短路径。即每次对所有可见点的路径长度进行排序后,选择一条最短的路径,这条路径就是对应顶点到源点的最短路径。2.限制:图G中不存在负权值的边3.理解:看到两张图对于这个算法的理解有帮助:...原创 2021-12-02 11:30:13 · 556 阅读 · 0 评论 -
数据结构 图的邻接表
邻接表的出现是因为图若是稀疏图,用邻接矩阵会造成空间的浪费,毕竟你要开辟一个一维数组和一个二维数组嘛,而且还是大开小用的那种。邻接表为了避免内存的浪费引入了链式存储,它的处理办法是:1.用一个一维数组存储顶点,当然你也可以用单链表存储,2.用单链表存储顶点的邻接点,可以将顶点改为结构体数组,结构体中存放邻接点的指针,邻接点也创建一个结构体,定义指针next存放该顶点的另一个邻接点,这样就可以把该顶点的所有邻接点串起来了。下面是一个无向的网图:邻接表中数据的存储图示如下顶点..原创 2021-11-17 19:13:17 · 511 阅读 · 0 评论 -
DS二叉树——二叉树之父子结点
题目描述给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构。编写程序输出该树的所有叶子结点和它们的父亲结点输入第一行输入一个整数t,表示有t个二叉树第二行起,按照题目表示的输入方法,输入每个二叉树的先序遍历,连续输入t行输出第一行按先序遍历,输出第1个示例的叶子节点第二行输出第1个示例中与叶子相对应的父亲节点以此类推输出其它示例的结果样例输入3AB0C00D00AB00C00原创 2021-10-28 10:41:04 · 291 阅读 · 0 评论 -
数据结构学习(十)线索二叉树与森林二叉树转化
1.线索二叉树是什么?为了区分二叉树的左孩子指针和右孩子指针是否为空,或者是否指向前驱节点或后继节点,我们将节点的结构改成5个域,在原二叉树的基础上添加左标志域Ltag和右标志域Rtag,他们是两个int型的数据域。Lchild Ltag data Rtag Rchild 1.如果节点有左孩子,那么Lchild依然指向他的左孩子,否则指向遍历序列中他的前驱节点。2.如果节点有右孩子,那么Rchild依然指向他的左孩子,否则指向遍历序列中他的后继节点。3.Ltag原创 2021-10-25 22:49:06 · 429 阅读 · 0 评论 -
数据结构学习(九)二叉树性质
1.在二叉树的第i层上最多有2^(i-1)个节点 。(i>=1)用归纳法证明:归纳基:i = 1 层时,只有一个根结点, 2i-1 = 20 = 1;归纳假设:假设i=k时,命题成立;归纳证明:二叉树上每个结点至多有两棵子树,则第 k+1 层的结点数 最多为2k-1 x 2 = 2k+1-1 。只要稍微画画图就能理解了。2.深度为k的二叉树,至多有2^k-1个节点。(k>=1)由性质1,深度为 k 的二叉树上的结点数至多为:2...原创 2021-10-19 13:49:22 · 185 阅读 · 0 评论 -
数据结构学习(八)二叉树
二叉树学习:1.概念一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:每个结点最多有两棵子树,即二叉树不存在度大于2的结点。 二叉树的子树有左右之分,其子树的次序不能颠倒。2.数据结构中的二叉树3.特殊二叉树3.1完全二叉树若堆的深度【层数】为h,除了最后一层,其上各层 (1~h-1) 的结点数都达到最大个数,并且最后一层所有的结点都连续集中在最左边,这就是完全二叉树。3.2堆堆是利用完全二叉原创 2021-10-12 16:20:00 · 307 阅读 · 0 评论 -
数据结构学习(七)树
1、树的定义线性表、栈、队列、串是一对一的数据结构,而树是一对多的数据结构。树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、……、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree),如图6-2-1:树的定义其实就是我们在讲解栈时提到的递归方法。也就是在树的定义之中还用到了树的概念,这是一种比较新的定义方法。图6-转载 2021-09-27 00:27:28 · 207 阅读 · 0 评论 -
数据结构学习(六)队列
1.简介队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出...原创 2021-08-29 00:14:04 · 126 阅读 · 0 评论 -
C++—vector与unordered_map
1.vector1.1说明vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。进行vector操作前应添加头文件#include <vector>1.2初始化1.vector<int>a(10); //定义具...原创 2021-08-14 15:40:45 · 2753 阅读 · 0 评论 -
数据结构学习(五)双向链表和栈的初学
一、双向链表1.1简介双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。1.2特点每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 实现起来要困难一些。 相对于单向链表, 必然占用内存空间更大一些。 既可以从头遍历到尾, 又可以从尾遍历到头。简图如下:从上中可以看到,双向链表中各节点包含以下 3 部分信息:.原创 2021-08-07 16:25:56 · 530 阅读 · 0 评论 -
数据结构学习(四)循环链表
一、定义:循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。二、分类:(1)单循环链表——在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可。(2)多重链的循环链表——将表中结点链在多个环上[1]。三、判断是非为空链表:判断空链表的条件是head==head->next;rear==rear->next;四、尾指针:用尾指针rear表示的单循环链表对开始结点a1和终端结点an查找时...原创 2021-08-03 00:47:16 · 511 阅读 · 0 评论 -
数据结构学习(三) 顺序存储和链式存储
一、顺序存储结构(也可称为顺序表)顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。顺序表的特点是逻辑上相邻的数据元素,物理存储位置也相邻,并且,顺序表的存储空间需要预先分配。 优点: (1)方法简单,各种高级语言中都有数组,容易实现。 (2)不用为表示节点间的逻辑关系而增加额外的存储开销。 (3)顺序表具有按元素序号随机访问的特点。 缺点: (1)...原创 2021-07-25 00:38:49 · 4975 阅读 · 0 评论 -
数据结构学习(二) 时间复杂度和空间复杂度
算法判断优劣算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。一、时间复杂度大O符号表示法,即 T(n) = .原创 2021-07-18 02:15:19 · 321 阅读 · 0 评论 -
数据结构学习(一)
前言下学期开始数据结构的课程,现在暑假时间快到了,我要准备开始这方法的学习了。定义 百度:数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 补充:传统上我们把数据结构分为逻辑结构和物理结构。逻辑结构定义: 百度:系统的逻辑结构是对整个系统从思想的分类,把系统分成若干个逻...原创 2021-07-11 03:08:34 · 157 阅读 · 0 评论