
数据结构
数据结构基础知识,思路和代码
自己学习的过程中的总结,并不是为了谁而写的
舔甜歌姬的EGUMI LEGACY
你好,你想度過怎樣的一段人生?
因爲興趣,所以喜歡。
展开
-
【数据结构X.11】代码实现 哈夫曼树的创建,建立,构造,实现哈夫曼编码
哈夫曼树的各种语言java,python,c++代码实现哈夫曼树的创建,建立,构造,实现哈夫曼编码,实现思路和要点:抓住哈夫曼树的性质,每轮选出2个权值最小的点进行构造树。抓住哈夫曼编码的性质,从根出发,向左标0,向右标1.哈夫曼树的构造思路:已知某系统在通信联络中只可能出现8种字符,其概率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11 试着设计赫夫曼编码。假设权w=(5,29,7,8,14,23,3,11),n=8,则m=15,按照上述算法构造一颗哈夫曼树原创 2020-12-13 02:00:51 · 2094 阅读 · 0 评论 -
【数据结构X.10】平衡二叉树的创建,RR旋转,LL旋转,RL旋转,LR旋转,插入、平衡二叉树删除节点和查找插入路径上,距离插入节点最近的平衡因子绝对值大于1的节点,二叉平衡树的高度和平衡因子计算
平衡二叉树的创建,RR旋转,LL旋转,RL旋转,LR旋转,插入、删除和一些其他操作。平衡二叉树只是一种特殊的二叉排序树,其左右子树的高度差小于1。左旋、右旋、左旋后右旋、右旋后左旋的理解:实际就是通过左右旋转,使得平衡树始终保持平衡。平衡树神奇的一点就在于,即使整棵树乱七八糟的,只要找到距离插入节点最近的平衡因子为2的祖先节点,然后围绕它进行旋转即可。部分平衡了,这样的平衡就可以维持到整棵树。那么如何从插入节点开始向上查找,找到失衡节点呢?如何判断是哪一种类型的旋转。二叉树的删除过程的理解。原创 2020-12-10 23:17:41 · 414 阅读 · 0 评论 -
【数据结构X.9】二叉排序树(BST)的插入、查找(非递归),递归算法、中序遍历二叉排序树,输出有序树,层序遍历BST树、创建一颗二叉排序树、二叉排序树的删除
代码实现:二叉排序树(BST)的插入、查找(非递归),递归算法、中序遍历二叉排序树,输出有序树,层序遍历BST树、创建一颗二叉排序树、二叉排序树的删除等等。概念:没什么好说的,二叉排序树(BST)就是一个中序遍历有序的树,如图中的红色的区域左边整体小于右边,以77为根,明显绿色区域小于黄色区域,所以进行插入时,遇到了比它的根节点大的,就放在左边,比它的根节点小的就放在右边,然后递归,如果遇到了合适的空位,也就是tr==NULL这时候就是插入的时候,难点:二叉排序树最难的地方在于其删除操作,当是需原创 2020-12-09 01:31:04 · 1006 阅读 · 0 评论 -
【数据结构X.8】代码实现和算法解析 已知一颗树的层次序列及每个节点的度, 编写算法构造这个树的孩子兄弟链表
问题:已知一颗树的层次序列及每个节点的度, 编写算法构造这个树的孩子兄弟链表分析:由于层次遍历的顺序可以根据节点的度去充分地遍历每一个节点的兄弟,所以可以每次都把每一层节点的兄弟关系先链接好,并且由于父子关系只能查找一次,所以按照层序序列经过节点时,需要把其孩子节点链接上。所以按照层序次序遍历节点时,链接上孩子节点,并且链接上该节点的全部兄弟节点。int length = 9;int levelOrder[length] = {3, 2, 1, 5, 4, 6, 8, 7, 9};int de原创 2020-12-06 23:03:48 · 1741 阅读 · 0 评论 -
【数据结构X.7】树的前序遍历建立左孩子右兄弟,孩子链表,求孩子兄弟表示法存储的森林的叶子节点数目,以孩子兄弟链表为存储结构,求解树的深度,已知一颗树的层次序列及每个节点的度, 构造这个树的孩子兄弟
树算法习题1.树的前序遍历建立树,访问顺序相当于二叉树的中序遍历2.求孩子兄弟表示法存储的森林的叶子节点数目3. 前序访问树节点4.递归方法求孩子兄弟表示法存储的森林的叶子节点数目5.建立孩子链表6.访问孩子链表表示法的节点,打印7.孩子链表为存储结构,设计递归算法求解树的深度8.以孩子兄弟链表为存储结构,求解树的深度9.已知一颗树的层次序列及每个节点的度, 编写算法构造这个树的孩子兄弟链表原创 2020-12-06 22:47:21 · 1972 阅读 · 0 评论 -
【数据结构X.6】代码实现:左孩子右兄弟表示法转换为树的双亲表示法,左孩子右兄弟表示法转化为树的孩子兄弟链表表示法,树的双亲表示法转化为左孩子右兄弟的二叉树表示法
前文提要:【数据结构X.5】树、森林的双亲表示法,左孩子右兄弟表示法,创建树的左孩子右兄弟二叉树以及二叉树到树的双亲表示法的转换思路和算法本文主题:可执行代码和代码示例在最后。【左孩子右兄弟】表示法转换为树的【双亲表示法】【左孩子右兄弟】表示法转化为树的【孩子兄弟】链表表示法树的【双亲表示法】转化为【左孩子右兄弟】的二叉树表示法其他的例如【孩子兄弟】链表表示法转【左孩子右兄弟】的二叉树表示法,【孩子兄弟】链表表示法转【双亲表示法】,都是类似的原理,不再赘述了。正文:1.【左孩子右兄弟】原创 2020-12-05 22:39:59 · 3781 阅读 · 0 评论 -
【数据结构X.5】代码实现 树和森林的双亲表示法,左孩子右兄弟表示法,创建树的左孩子右兄弟二叉树以及二叉树到树的双亲表示法的转换思路和算法
树的双亲表示法、树的左孩子右兄弟表示法、孩子表示法1. 树和森林的双亲表示法,2. 树的左孩子右兄弟表示法3. 创建树的左孩子右兄弟二叉树4. 二叉树到树的双亲表示法的转换思路和算法原创 2020-12-05 03:23:22 · 2905 阅读 · 0 评论 -
【数据结构X.3】先序遍历序列第k节点值,删去以x为根的子树,最近的公共祖先节点,非空二叉树的宽度,求解后序序列,叶子节点按从左到右的顺序连成一个单链表,递归非递归
二叉树算法习题: 1.设计算法,求解先序遍历序列第k(1<=k<=n)个节点的值 2.对于树中每个元素为x的节点,删去以它为根的子树,释放相应的空间 3. p和q分别为指向二叉树中的任意两个节点的值,其中数值不会重复,找到离p和q最近的公共祖先节点 4.求非空二叉树b的宽度:具有节点数目最多的那一层的节点个数 5.假设一颗满二叉树,所有节点都不同,已知先序序列是pre,设计算法求解后序序列post6.1.非递归,设计算法将二叉树的叶子节点按从左到右的顺序连成一个单链表,表头指针为head,二叉树原创 2020-12-03 00:48:23 · 702 阅读 · 0 评论 -
【数据结构X.2】二叉树基础算法层次遍历,求解二叉树的高度,先序和中序建立二叉树链表,判定二叉树是否是完全二叉树,交换全部左右子树
二叉树算法习题:1.二叉树自下而上,自左到右的层次遍历算法2.非递归算法求解二叉树的高度3.递归算法求解二叉树的高度4.二叉树各个值不同,先序和中序遍历序列分别存于数组A[1..n],B[1....n]中, 算法建立该二叉树链表5.二叉树用二叉链表形式存储,写一个判定二叉树是否是完全二叉树的算法, `思路:层次遍历,遇到空节点,检查队列是否有节点`6.二叉树采用二叉链表存储,尝试设计一个算法, 计算一颗给定二叉树的所有双分支节点数7.把二叉树中,所有节点的左右子树交换原创 2020-12-02 20:24:22 · 420 阅读 · 0 评论 -
【数据结构X.1】代码实现 二叉树的前序遍历,中序遍历,后序遍历和层次遍历
二叉树的前序遍历,中序遍历,后序遍历和层次遍历难点:二叉树的主要难点在于理解其递归性质。从根开始,左右孩子分别又是其左右孩子的根,子子孙孙无穷尽也,如果能理解二叉树内部的相似性,那么剩下的实现就不难了。后序遍历的非递归算法:借助栈和一个记录上次访问的根节点的指针,可以实现后序遍历的非递归算法。后序遍历的顺序为:左子,右子,根;所以,后序遍历算法首先访问的必然是某棵子树的尽量靠左下的节点(虽然不一定是左子节点!例如图1);原创 2020-12-02 12:40:49 · 341 阅读 · 0 评论 -
【数据结构三】链表之单链表易错点,概念分析和代码分享——链表在函数内部的引用,链表的表头指针和表头结点,其他类型的链表
链表之单链表易错点,概念分析和代码分享——链表在函数内部的引用,链表的表头指针和表头结点,其他类型的链表说明:以下代码均用c++编写,linux下可以编译和执行:g++ LinkList_use.cpp -o LinkList_use./LinkList_use易错点:1.链表的表头指针和表头结点平时我们看到的定义是这样的:typedef struct LNode{ int data; struct LNode *next;}LNode, *LinkList;原创 2020-11-24 02:08:13 · 1040 阅读 · 0 评论 -
【数据结构二】线性表之顺序表 概念和习题:两个有序数组合并 调换数组某部分得到目标顺序 有序单调递增线性表的最快查找与替换 找出主元素 找出中位数
目录:【数据结构一】逻辑结构,物理结构和数据运算 算法时间复杂度前言:线性表是逻辑结构,实现线性表的是存储结构,可以是顺序存储(顺序表,例如数组)也可以是链式存储(单链表,双链表,循环链表,静态链表(利用数组实现,特点依然是逻辑相邻,物理存储不一定相邻))数据结构c语言定义://静态分配:#define MaxSize 50typedef struct{int data[MaxSi...两个有序数组合并 调换数组某部分得到目标顺序 有序单调递增线性表的最快查找与替换 找出主元素 找出中位数原创 2020-04-22 23:48:43 · 494 阅读 · 0 评论 -
【数据结构一】逻辑结构,物理结构和数据运算 算法时间复杂度
前言:逻辑结构就是人为在思维上定义的结构,描述了数据元素之间逻辑上的关系。存储结构就是在磁盘或者内存上保存的结构,是数据结构在计算机中的表示,包括了数据元素的表示和关系的表示。是计算机语言实现的逻辑结构(一个逻辑结构可以有多种存储结构的实现)。主要有顺序存储,链式存储,索引存储和散列存储。顺序存储:数组,特点:逻辑上相邻的元素,在物理存储位置上也相邻优点:1.随机存储 2. 每个...原创 2020-04-22 16:31:49 · 526 阅读 · 0 评论 -
数据结构线性表-顺序表:两个有序顺序表合并为一个新的有序顺序表,并返回结果
数据结构题-顺序表:将俩有序顺序表合并为一个新的有序顺序表,并返回结果输入:3 31 2 3 4 5 6输出1 2 3 4 5 6输入:3 33 3 4 4 5 5输出:3 4 5思路:简单比较两个数组大小,由于有序,1.如果结果数组当前存储和a数组或者b数组当前存储重复,就跳过, 2.如果没有重复,就把小的那个存入。注意:注意相等情况的处理,不要遗漏c...原创 2020-03-16 17:48:19 · 4935 阅读 · 0 评论 -
数据结构与算法--图型结构的建立与搜索
**课程名称:数据结构与算法 课程类型:必修 实验项目:图型结构的建立与搜索 实验题目:图的存储结构的建立与搜索 实验日期:2017/12/3**一、实验目的图的搜索(遍历)算法是图型结构相关算法的基础,本实验要求编写程序演示无向图三种典型存储结构的建立和搜索(遍历)过程。让我们在这个过程中熟悉这些操作之间的关系和内在联系。二、实验要求及实验环境1.分别实现无向...原创 2018-03-05 16:44:18 · 1154 阅读 · 0 评论 -
【数据结构】哈工大实验一:一元多项式(代碼以及報告)
代碼見最後的附錄。一、 实验目的写一个代码计算一元多项式 以链表存储一元多项式,在此基础上完成对多项式的代数操作。 1.能够输入多项式(可以按各项的任意输入顺序,建立按指数降幂排列的多项式)和输出多项式(按指数降幂排列),以文件形式输入和输出,并显示。 2.能够计算多项式在某一点x=x0的值,其中x0是一个浮点型常量,返回结果为浮点数。 3.能够给出计算两个多项式加法、减法、乘...原创 2018-03-05 00:56:59 · 1892 阅读 · 1 评论