数据结构与算法
数据结构学习
皮卡qiu~
这个作者很懒,什么都没留下…
展开
-
归并排序
一、需求利用归并排序实现一个无序数组的升序排列;原创 2020-11-27 18:25:24 · 83 阅读 · 0 评论 -
图的基本操作
一、图的基本介绍1.1 为什么需要图这种数据结构?线性表和树表示的是前驱和后继,不能表示多对多的关系; 图可以用来表示多对多的关系;原创 2020-06-04 19:38:05 · 390 阅读 · 0 评论 -
平衡二叉树(AVL)
一、平衡二叉树1.1 平衡二叉树简介空树或它的左右两棵子树的高度差的绝对值不超过1,并且左右两棵子树都是平衡二叉树。1.2 平衡二叉树的特点查询效率较高1.3 平衡二叉树示例二、二叉排序树的左旋转2.1 什么时候需要左旋转当二叉排序树的右子树的高度(Rh)比左子树的高度(Lh)多1时,即Rh-Lh > 1。2.2 左旋转思路2.3 左旋转图...原创 2020-05-24 19:37:06 · 144 阅读 · 0 评论 -
二叉排序树的建立、删除
一、基本介绍二叉排序树(BST),任何一个非叶子结点的值,要大于其左子结点的值,小于其右子结点的值二、二叉排序树的建立2.1 思路分析定义结点类,设置结点的相关属性 定义向二叉排序树添加结点的方法,如何实现该方法呢? A:若传入结点为空,则直接返回 B:若传入的结点不为空,则判断传入结点(node)的值和当前子树根结点的值的大小关系...原创 2020-04-23 21:45:27 · 1004 阅读 · 0 评论 -
赫夫曼树实现数据压缩和解压
一、为什么要进行数据压缩现在有一个字符串:"i like like like java do you like a java" 若按照定长编码,即每个字符都用其ASCII码来表示,如下图,效率低下若按照变长编码,也就是统计各个字符的个数,根据个数高低按照0,1,10,11,100,101,110,111等进行编码,缺点是编码后具有二义性,比如101可能是1与10、10与1、101...原创 2020-04-21 09:32:50 · 353 阅读 · 0 评论 -
赫夫曼树(java)
一、基本概念1.1 什么是赫夫曼树给定N个权值作为N个叶子结点,构造一颗二叉树; 该树的带权路径长度(WPL)最小; 权值越大的结点离根节点越近;1.2 什么是权值百科:将树中结点赋给一个有着某种含义的数值。什么意思???我的理解是将数值赋给结点类中的一个变量,那么结点本身就有了权值这个属性,但是我没看懂这个定义。1.3 什么是路径从父结点到达其孩子结点或者孙子...原创 2020-04-09 21:16:07 · 172 阅读 · 0 评论 -
堆排序(java)
目录一、大顶堆二、利用大顶堆排序2.1 思路分析2.2 大顶堆升序排序2.3 小顶堆降序排序三、总结一、大顶堆必须是完全二叉树 父节点的值必须大于其子节点的值二、利用大顶堆排序2.1 思路分析 A:给定一个数组,将该数组看作一棵虚拟的完全二叉树; B:将该数组构造成一个大顶堆 a:找到最后一个非叶...原创 2020-04-05 21:57:53 · 128 阅读 · 0 评论 -
二叉树的线索化及遍历
目录一、需求二、前序线索化2.1 前序线索化图解2.2 前序线索化代码实现2.3 前序线索化的遍历三、中序线索化3.1 中序线索化图解3.2 中序线索化代码实现3.3 中序线索化的遍历四、后序线索化4.1 后序线索化图解4.2 后序线索化代码实现五、完整代码一、需求/* * 需求:实现线索化二叉树 * 分析: *...原创 2020-03-26 21:01:42 · 348 阅读 · 0 评论 -
顺序存储二叉树
一、需求 A:以数组的形式来存放二叉树的结点; B:遍历数组时,完成对结点的前序遍历,中序遍历和后序遍历;二、分析 A:给定数组,n表示数组的下标; B:想象一棵树,将树按照层序遍历编码,一一对应数组下标; C:那么若树的结点编码为n,则其左孩子编码为2*n+1,右孩子为2*n+2,其父结点为(n-1)/2;三、代...原创 2020-03-20 20:53:10 · 166 阅读 · 0 评论 -
二叉树的前序、中序、后序遍历、查找、删除
一、需求 A:利用java建立一颗二叉树,并进行前序,中序,后序的遍历;二、分析2.1 如何建立原创 2020-03-18 19:52:21 · 279 阅读 · 0 评论 -
二分查找边界值问题归类
目录一、问题描述二、思路分析三、代码实现3.1 情况1对应的代码3.2 情况2对应的代码3.3 情况3对应的代码四、总结一、问题描述 A:假设一个含有n个元素的数组,采用二分查找的方法寻找某个元素;二、思路分析 A:通过简单的数组进行推导,可以分为3类,这3类也可以相互转化三、代码实现3.1 情况1对应的代码...原创 2020-02-03 16:49:01 · 362 阅读 · 0 评论 -
图的深度优先搜索(邻接矩阵为例)
一、图的结构二、程序实现/*项目名称:深度优先搜索算法编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.31学习目标:1.掌握邻接矩阵的深度优先搜索算法注意事项:1.测试所有功能是否正常遇到问题:1.深度优先算法的理解(1)从顶点A开始遍历,找到A的邻接点B(2)找B的邻接点,先找到A,发现A已遍历过,那么找B相对于A的下一个邻接点(3)直...原创 2019-10-31 17:08:57 · 833 阅读 · 0 评论 -
邻接多重表实现无向图的存储
一、图二、程序 (与十字链表差不多)/*项目名称:邻接多重表存储无向图编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.30学习目标:1.掌握邻接多重表存储无图的基本操作注意事项:1.测试所有功能是否正常遇到问题:*/#include <stdio.h>#include <stdlib.h>#define MA...原创 2019-10-30 16:58:44 · 773 阅读 · 0 评论 -
十字链表存储有向图
一、算法基本思想从上图中选出3个结点分析运行过程1.第一次循环2.第二次循环3.第三次循环二、代码如下/*项目名称:十字链表存储有向图编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.29学习目标:1.掌握十字链表存储图的基本操作注意事项:1.测试所有功能是否正常遇到问题:*/#include <std...原创 2019-10-29 21:39:25 · 599 阅读 · 0 评论 -
邻接表存储图(无向图为例)
一、图的样式二、实现代码/*项目名称:邻接表存储图编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.28学习目标:1.掌握邻接表存储图的基本操作注意事项:1.测试所有功能是否正常遇到问题:1.创建单链表时用的的是LinkList *类型,LinkList本身是结构体指针类型,在创建时的形参相当于一个二级指针;2.当函数形参为Node *类型...原创 2019-10-28 20:26:26 · 4579 阅读 · 0 评论 -
邻接矩阵存储图的基本操作(不含图的遍历)
一、程序/*项目名称:邻接矩阵存储图编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.27学习目标:1.掌握邻接矩阵存储图的基本操作注意事项:1.测试所有功能是否正常遇到问题:1.结构体ArCell的作用是什么?以及它的成员变量的作用理解:(1)目的是定义邻接矩阵,矩阵有20*20个位置(2)每个位置需要判断带权或不带权,带权则填写权值,不带则用-...原创 2019-10-27 18:46:34 · 1594 阅读 · 0 评论 -
线索二叉树的建立
一、代码地址讲解小甲鱼数据结构:https://www.bilibili.com/video/av2975983/?p=50&t=2599二、代码如下/*项目名称:线索二叉树编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.19学习目标:1.先了解下线索二叉树注意事项:1.测试所有功能是否正常*/#include <stdio.h&g...原创 2019-10-19 21:36:56 · 190 阅读 · 0 评论 -
二叉树的链式存储结构
一、要建立的二叉树二、代码如下/*项目名称:二叉树的二叉链表存储表示编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.18学习目标:1.掌握二叉链表存储表示的基本操作注意事项:1.测试所有功能是否正常*/#include <stdio.h>#include <stdlib.h>#include <math.h>...原创 2019-10-18 15:53:36 · 450 阅读 · 0 评论 -
二叉树的顺序存储结构
一、程序如下/*项目名称:二叉树的顺序存储结构编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.13学习目标:1.掌握二叉树顺序存储结构的基本操作注意事项:1.测试所有功能是否正常*/#include <stdio.h>#include <stdlib.h>#include <math.h>#define MA...原创 2019-10-17 17:15:12 · 450 阅读 · 0 评论 -
顺序串的建立与操作
一、代码如下/*项目名称:顺序串的建立与基本操作编译环境:VC++ 2008作者相关:。。。最后修改:2019.6.29学习目标:赋值、复制、判空、比较、求长、清空、连接、返回子串、返回子串下标、替换子串、删除子串、销毁注意事项:1.测试所有功能是否正常*/#include <stdio.h>#include <string.h>...原创 2019-06-29 22:15:04 · 1060 阅读 · 0 评论 -
循环链队列的建立与操作
一、代码如下/*项目名称:链循环队列的建立与基本操作编译环境:VC++ 2008作者相关:。。。最后修改:2019.6.26学习目标:初始化、销毁、清空、判空、求长、返回队头元素、插入元素、删除元素、输出队列中元素注意事项:1.测试所有功能是否正常2.front始终指向头结点而不是首元素,rear始终指向尾元素*/#include <stdio.h&g...原创 2019-06-26 19:45:12 · 1912 阅读 · 1 评论 -
循环顺序队列的建立与操作
一、基本思路1.初始化建空队列时,令front=rear=0;2.插入元素时尾指针增1,删除队头元素时头指针增1,;3.头指针始终指向队头元素,尾指针指向尾元素的下一个位置,如图;4.臆造环状空间(1)在a状态下依次插入J5,J6,J7得到b,在a状态下依次删除J3,J4,J5得到c;(2)队列满或空时都有front=rear,两种解决方法:一是设置标志位,二是预留...原创 2019-06-25 21:59:13 · 1182 阅读 · 0 评论 -
链队列的建立与操作
一、基本思路1.与单链表操作类似,多了一个尾指针;2.建立含有头结点的链队列,其中front恒指向头结点,rear恒指向尾结点;二、代码如下/*项目名称:链队列的建立与基本操作编译环境:VC++ 2008作者相关:。。。最后修改:2019.6.23学习目标:初始化、销毁、清空、判空、求长、返回队头元素、插入元素、删除元素、输出队列中元素注意事项:1.测试所...原创 2019-06-23 20:40:42 · 666 阅读 · 0 评论 -
顺序队列的建立及操作
一、基本思路1.与顺序栈的操作几乎一样,区别是在删除元素时,删除的是第一个结点;2.顺序栈的空间是由base指针申请的,利用top指针进行插入、删除操作,并不影响base,因此最后释放时,能全部释放;3.但顺序队列不同,若建立front和rear_next(最后一个元素的下一个位置),若由front申请内存,在删除操作时会更改front的 指向,最后释放时会造成内存泄漏;4...原创 2019-06-23 10:45:41 · 734 阅读 · 0 评论 -
链栈的建立与基本操作
一、链栈的建立1.定义结点结构体,含有数据和指针两个成员变量;2.定义栈结构体,含有栈顶指针和栈中元素个数两个成员变量,其中栈顶指针是结点结构体指针类型;3.栈顶指针当作头指针指向第一个元素,利用头插法实现入栈;二、代码如下/*项目名称:链栈的建立与基本操作编译环境:VC++ 2008作者相关:。。。最后修改:2019.6.21学习目标:初始化、销毁、清空...原创 2019-06-21 21:31:07 · 2767 阅读 · 0 评论 -
顺序栈的建立及操作
一、代码如下/*项目名称:顺序栈的建立与基本操作编译环境:VC++ 2008作者相关:。。。最后修改:2019.6.20学习目标:初始化、销毁、清空、判空、求长、返回栈顶元素、插入元素、删除元素、输出栈中元素注意事项:1.测试所有功能是否正常2.s->base = (ElemType *)realloc(s->base,(s->stacksiz...原创 2019-06-23 10:00:48 · 630 阅读 · 0 评论 -
双向循环链表的建立及操作
一、代码如下/*项目名称:双向循环链表的建立与基本操作编译环境:VC++ 2008作者相关:。。。最后修改:2019.6.19学习目标:判空、求长、获取元素位置、返回某个位置的元素、插入元素、删除元素、清空链表、销毁链表注意事项:1.测试所有功能是否正常*/#include <stdio.h>#include <stdlib.h>...原创 2019-06-19 20:42:43 · 2083 阅读 · 0 评论 -
双向链表的建立与操作
一、代码如下/*项目名称:双向链表的建立与基本操作编译环境:VC++ 2008作者相关:。。。最后修改:2019.6.19学习目标:判空、求长、获取元素位置、返回某个位置的元素、插入元素、删除元素、清空链表、销毁链表注意事项:1.测试所有功能是否正常2.true/false不是数据类型,不能用typedef,要使用define3.NULL本身没有prior和...原创 2019-06-19 20:16:59 · 347 阅读 · 0 评论 -
循环链表的建立(尾指针)
一、基本思路1.如果要遍历到最后一个元素,使用头指针的时间复杂度是O(n),若使用尾指针,查找最后一个和第一个的时间复杂度都是O(1);2.利用函数返回尾指针,通过传递尾指针来完成函数操作;二、代码如下:/* 项目名称:循环链表的建立与基本操作 编译环境:VC++ 2008 作者相关:。。。 最后修改:2019....原创 2019-06-05 17:13:06 · 5087 阅读 · 1 评论 -
循环链表的建立(带头结点)
一、基本思路1.循环链表与单链表的区别(1)初始化的时候,头结点的next指向它自己;(2)判断条件上,由p!=NULL更换为p != *L;(3)更新尾结点的时候,要由NULL改为*L;二、代码如下/* 项目名称:循环链表的建立与基本操作 编译环境:VC++ 2008 作者相关:。。。 最后修改:201...原创 2019-06-01 18:05:41 · 2600 阅读 · 2 评论 -
静态链表的理解及基本操作
一、静态链表的由来某些高级语言里面并没有指针,只有数组,静态链表就是利用数组来实现类似链表的操作二、如何建立静态链表1.要分配足够大的内存,用来存放变量,内存大小记为MAXSIZE;2.内存不仅要存放数据,而且要存放' 指针 ',把它称为游标,满足这一条件的变量类型是结构体,其定义如下:typedef struct{ ElemType data; int c...原创 2019-05-27 17:31:42 · 3301 阅读 · 0 评论 -
单链表的理解及操作
一、对于结点的理解1.结点的定义typedef struct Node{ ElemType data; struct Node *next;}Node;2.对该定义进行分解,首先得到:struct { ElemType data; struct Node *next;}Node;分析:Node是一个结构体变量,内含两个成员变...原创 2019-05-18 18:16:47 · 687 阅读 · 0 评论 -
线性表基本操作
程序名称:线性表编译环境:VC++6.0作者相关:。。。最后修改:2019.5.10 学习目标:1.如何建立线性表 2.掌握线性表的基本操作:初始化、判断空表、获取某位置元素、插入、删除元素、清空表、合并、输出 常见错误: 1.if后有两条或两条以上语句时,要加括号...原创 2019-05-13 17:28:48 · 634 阅读 · 0 评论 -
串的堆分配存储表示
一、代码如下/*项目名称:串的堆分配存储表示编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.01学习目标:赋值、复制、判空、比较、求长、清空、连接、返回子串、返回子串下标、替换子串、插入字串注意事项:1.测试所有功能是否正常2.SubString函数中len最大值为StrLength(S)-pos+1例:12345,长度为5,即5-1+...原创 2019-10-01 17:34:46 · 600 阅读 · 0 评论 -
串的块链存储表示
一、参考地址部分函数参考的博客:https://blog.csdn.net/qq_15037231/article/details/52206652二、代码实现/*项目名称:串的块链存储表示编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.10学习目标:赋值、复制、判空、比较、求长、清空、连接、返回子串、返回子串下标、替换子串、插入字串注意...原创 2019-10-10 20:39:08 · 744 阅读 · 0 评论 -
串的BF算法
一、代码如下/*项目名称:串的模式匹配算法编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.11学习目标:1.BF算法注意事项:1.测试所有功能是否正常*/#include <stdio.h>#include <string.h>#define ERROR 0#define OK 1#define...原创 2019-10-11 17:54:15 · 418 阅读 · 0 评论