数据结构
文章平均质量分 63
c++的数据结构
多方通行8
啥都会一点的卷人,因为都会一点,所以发的东西也不规律,有心情就发东西,没心情就学习
我是卷心菜,越卷越菜。
展开
-
五大算法思想(附走台阶问题,兔子问题,求最短路径问题,求最大上升子串长度问题,8皇后问题,http爬虫,图结构A星寻路问题源码)
简单讲解五大算法思想:1.分治思想2.贪心算法/贪婪算法3.动态规划4.动态回溯5.分支定界思想(其中附走台阶问题,兔子问题,求最短路径问题,求最大上升子串长度问题,8皇后问题,http爬虫,图结构A星寻路问题的解决源代码)源码全部用c/c++写的,都是十分经典的问题。编译器是:VS2022个人学习笔记(记录)原创 2023-01-08 16:36:07 · 466 阅读 · 2 评论 -
BF和KMP算法(附自己写的源码)
BF爆破法,就是由两个指针一个一个进行比较,比较字符如果不是一样的,则主串指针退回到比较开始的下一个字符重新开始,子串指针回到字串第一位字符。KMP算法,则是在BF的基础上进行的优化,即比较字符的时候,上面的指针不动,下面指针归0,然后再进行比较。又考虑到可能有特殊情况,aaaab和aaab这种类似刁民的东西。所以要专门准备一个函数,求这些K,制造一个next数组。假设上面是i,下面是j,下面比较的下标就是。K的意义是,父串和子串前面有K个字符相等。:3个人总结的,所以是3个人的名字结合。原创 2023-01-06 11:01:22 · 208 阅读 · 0 评论 -
红黑二叉树(附写的源码)
如果我们希望它能够在数据量多的时候,层数少,那么就是每一层能够保存更多的数据,这样子虽然查找快了一些,但每一层又臃肿了一些。而为了性能的增强,从二叉树开始一步步进化,有了有序二叉树,然后到平衡二叉树,然后到了23树。3.1被插入节点父节点颜色为红色,并且叔叔节点颜色为黑色,并且插入节点是其父节点的左孩子。3.2被插入节点父节点颜色为红色,并且叔叔节点颜色为黑色,并且插入节点是其父节点的右孩子。从一个节点到这个节点的任意一个子孙节点,路径上包含相同个数的黑色节点。情况二:新节点的父节点颜色为黑,啥都不干。原创 2023-01-05 15:53:56 · 174 阅读 · 3 评论 -
图结构-学习(附自己写的源码)
是对称的,0是不可以,1是可以,是从竖的到横的来看的,A能不能到B,A能不能到C。不一样的是边有长度(权值):无限大表示自己(也可以用没有出现过的值),0表示到不了。就比如A星寻路算法里面的f=g+h+w中的w,权值。就比如地图是用图结构的,那么所谓的寻路算法就是遍历。来表示的话,只需要加一个长度(权值)即可。:就像链表的节点树的子树 存数据的节点。是对称的,0是不可以,1是可以。多对多的数据结构-图结构。找某个顶点的第一个相邻顶点。找某个顶点的第二个相邻顶点。:用来描述顶点之间的关系。原创 2023-01-05 10:59:38 · 432 阅读 · 0 评论 -
hash表学习(附自己写的简单源码)
不论数据是什么,它会固定生成一个的一个串(原则上讲不同数据生成的串是不一样的),为什么叫非对称加密,因为它不能将串反向生成数据(它是单向的)。举例:打败游戏boss,在那一瞬间计算出会爆出啥东西,然后渲染到客户端,速度很快,问题是客户端这边要把信息发给服务端,然后服务端要很快计算完发给客户端。说这个梗的原因是因为:php相比于其他语言编译器,它对函数存储的hash表是比较low的,或者说php所用的用来存储函数的hash法不是很好。会发生冲突的可能是567,1567,2567,3567等等都在这个位置。原创 2023-01-03 20:47:12 · 284 阅读 · 0 评论 -
哈夫曼解压缩解压缩学习
通过节点来创建数组,在数组里面找到最小的两个,然后数组里面添加空的节点(最小两个的和),然后在寻找最小两个节点。举例:写在用的智能输入法,用的字的次数越多,那个字出现在前面就越多,就是用哈夫曼树的一种构建方式。看看所有数据的查找次数:1*1+(2+3)*2+(8+12+16+20)*3=179。则,查找次数:20*1+(16+12)*2+(8+2+3+1)*3=128。获取文件中出现的字节 和 每个出现字节出现的次数 组合成字典(索引)空白的为空字节,然后我们以左边的节点为0,右边的节点为1。原创 2022-12-30 20:10:03 · 861 阅读 · 0 评论 -
23树(附自己写的源码)
但为什么不用23树,是因为23树的节点是固定的,就是2节点或3节点,数据多的时候也是很麻烦的,数据多的时候可能是希望4,5,6,7,8节点,这样层数不会更多(比较灵活)。插入的时候一开始第一个数是2节点,当第二个数进来后变成3节点,当第三个数进来后变成4节点,然后4节点变成3个2节点。为什么叫23树:是因为它的树节点不一样,它的节点指针数量是不固定的(一般树是2个指针)所以要学习B+树,而要了解B+树,首先要学B树,而学B树之前,首先要学23树。而一旦节点里面的指针数量是变化的就不叫23树,而是B树。原创 2022-12-17 19:50:42 · 642 阅读 · 0 评论 -
平衡二叉树(附自己写的源码)
如果不平衡 用旋转(不平衡变平衡) 设置高度。就好像担当子,要左右平衡才好担,二叉树同样如此,要左右平滑才好查找。第三种:(左右旋)先以当前节点(10)左旋,然后以当前节点的父节点(11)为轴右旋。第四种:(右左旋)先以当前节点(10)左旋,然后以当前节点的父节点(11)为轴右旋。树中每一个节点左右孩子的高度差不超过1的有序二叉树(左右孩子的高度差)看如图:我们要查找最下方的1,左边和右边各要查找的次数是多少?(查找数据的高度)如:根为1,根孩子:2,根孩子的孩子:3。为什么学习平衡二叉树?原创 2022-12-16 16:30:17 · 203 阅读 · 0 评论 -
堆排序(附小顶堆源码)
因为完全二叉树除了最后一行,其他的都是有顺序的,可以用下标表示,即有树结构的优点,也有数组的优点。为什么有完全二叉树,因为他虽然是树结构,但并不希望用树结构去描述它(用数组即可描述)已知孩子下标为m,父节点的下标一定为:(m-1)/2【因为左孩子一定是奇数,右孩子一定是偶数】就是满二叉树从右往左,从下往上删,不是中间删除,就是完全二叉树。因为堆是特殊的完全二叉树:有序的完全二叉树,即堆。已知左孩子下标为m,父节点的下标为:(m-1)/2。已知右孩子下标为m,父节点的下标为:(m-2)/2。原创 2022-12-15 16:15:12 · 209 阅读 · 0 评论 -
A星寻路算法学习(附自己写的源码)
相对的细节也需要完善,要准备一个数组存储这些f,当其走过则删除(必然是删除最小的)【假如这个时候最小的路程会遇到墙壁,因为已经删除了,所以会选择另一个最小代价的去】h的计算:无视障碍到终点距离,是会随着移动而改变(离终点越近,这个越小)红色的为出发点,则要到右上角这个点,走的斜线和走右边的直线一画,一个等腰直角三角形就出现了。,万事万物都有代价,而量化评估就是由你来决定这个代价的值(这个值不能离谱,需要合乎实际)。如果这个代价设定是不合理的,得到的结果就会和想要得到的结果背道而驰。g是会随着移动而增加。原创 2022-12-14 20:11:00 · 1418 阅读 · 0 评论 -
c/c++数据结构之深度寻路算法基础(含自己写的源码)
什么意思呢?就是计算机中的人物要看看自己的四周是空地还是墙,如果是墙就不能走,是空地则可以走。原创 2022-09-14 20:00:16 · 1265 阅读 · 0 评论 -
数据结构之希尔排序和桶排序
简单画图讲述了希尔排序和桶排序的思想,含代码原创 2022-09-04 12:59:07 · 276 阅读 · 0 评论