随笔分类 - 数据结构
1
摘要:STL空间配置器一、开场白:给我的感觉就是,了解是空间配置器的功能,是那么的明了;在看原理,我还是很开心;接下来是360度大转变: 那么长的变量或者函数命名、那么多的宏、不爽,不过,遇上我这种二货,是精华,我也给嚼碎了,下面开始吧:二、STL是什么:1.S...
阅读全文
摘要:位图引入:2.给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 【腾讯】思路:如果内存够的话,40亿个整型使用位图存储需要500M左右的空间。分析:位图只适合判断,查找数据是否存在!如图解释:在代码中,使用的是无符号整...
阅读全文
摘要:一.时间复杂度:时间复杂度实际就是函数,函数计算执行的基本操作次数。ps:这里的函数是指数学里面的函数,而不是C语法里的函数。void Test1 ( int N ){ for (int i = 0; i F(N) = N^2 + 2N + 10...
阅读全文
摘要:实现二叉树的插入,查找,删除,以及递归实现:插入和查找很简单,把握一点,小的在树左,大的在树右,大树子树都遵循一样的规则,查找就更简单了:主要看删除,删除有三种情况,看图:在一下代码中详细有说明:#pragma oncetemplatestruct SBTNode{ ...
阅读全文
摘要:其实关于递归,我也是比较模糊的,至今能理解和能用的递归算法,基本是靠记忆和经验,要是让我自己设计一个递归,估计又得难半天,很早都想总结一下,喜欢浏览技术网站,总是能找到好东西,现在将递归算法总结如下,也不是多么深刻,多么高大上,可以说还是拙见吧:》》》定义递归算法:(...
阅读全文
摘要:前面说了用两个栈实现一个队列的算法,现在在写一个反过来的算法:1.算法描述:栈的特点就是先进后出,而队列的特点就是先进先出,基于两者的特点,有了此算法:先看一张图:都喜欢图,图也能直接表达题的意思和本人的意思:图中已经说的很清楚了,多余的方法暂且不说,按以上的图和思路...
阅读全文
摘要:看到这个题目,你第一感觉就是完了,不懂啊,没关系,我们看看什么叫二叉树的镜像,一张图说明:二叉树图还是借用上一篇博客的图:话说二叉树的镜像,用两个图足以说明,我们说图一是图二的一个镜像,也可以说图二的二叉树是图一二叉树的一个镜像看见图中的镜子了没,想想镜子起的作用,镜...
阅读全文
摘要:1.题目描述:将一个二叉搜索树转换成一个双向链表;2.二叉搜索树,直接看图:如图就是一个二叉搜索树的模型,也就是转换函数的入口数据,也是下边函数中即将用到的例子,既然有输入,肯定有输出,先面在看一张图(第三条):3.输入输出模型:右边就是最终的输出结果,5后边是空,下...
阅读全文
摘要:原题:用两个栈实现一个队列。思想:1.栈的特点不就是 先进后出,队列的特点就是先进先出。2.用两个栈实现先进先出的功能;图示:假设入队数据为 : 1,2,3,4,5,6,,红色方框中的 push 和 pop 等效为队列的push 和 pop1.push就和栈stack...
阅读全文
摘要:思想不多说,直接上一张图:(图是盗取的奥,快闭馆了,的抓紧时间):先分解,排序,然后合并,一下是代码:#pragma once//合并两个分组的void MergeSection(int *a, int *tmp, int begin1, int end1, int ...
阅读全文
摘要:关于二叉树的重建,我总结如下,并以图文的形式展示:一颗二叉树,已知先序遍历和中序遍历,要求还原出二叉树,问题不难,关键是细节:思想:1、先序遍历序列的第一个元素一定定是根节点,可以由此获取二叉树的根节点。2、在中序遍历序列中查找到根节点,由中序遍历的性质可知,中序遍历...
阅读全文
摘要:思想计数排序的基本思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数(此处并非比较各元素的大小,而是通过对元素值的计数和计数值的累加来确定)。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。计数排序对输入的数据有附加的限制条件...
阅读全文
摘要:思想(见图):等同于插入排序,不同的是,插入排序每次只间隔一个元素,而希尔排序间隔 gap个元素,最后一趟又是一边真正的插入排序(间隔一个):代码:#pragma oncevoid ShellSort(int *a, int size){ assert(a); int...
阅读全文
摘要:思想:(见图)方法一:直接上代码:void InsertSort(int *a,int size){ assert(a); int i, j, tmp; for (i = 0; i = 0; --j) //在有序序列中插入后来数 { if (a[j] > t...
阅读全文
摘要:上一篇是堆排序的简单过程,自认为下面这种更为合适:思想:1.建立大堆;2.取堆顶元素和堆尾元素交换;(此时,大堆已破坏,需要重新往下调整,恢复大堆)3.恢复大堆前,需要减掉已经在正确位置的堆尾元素;代码如下:#pragma once////建立大堆,void Adju...
阅读全文
摘要:直接上代码:#pragma once#include#include#includeusing namespace std;//树中节点结构templatestruct BinaryTreeNode{ T _data; BinaryTreeNode* _left; B...
阅读全文
摘要:冒泡排序:N个数;1.两层循环,外层循环N-1遍,控制循环的躺数,(n-1)是因为最后一趟不用比;2.内层,相邻两数比较,大的往后走;每走完一趟,比较次数少一次;3.循环结束,数组有序(升序);代码:#pragma once#includevoid BubbleSor...
阅读全文
摘要:堆排序:1.建大堆;2.堆顶元素和堆最后一个元素交换;3.继续建大堆(从上往下调整);4.再取堆顶元素与堆尾倒数第二个元素交换;5.升序输出代码:#pragma once#include#include//using namespace std; //尽量不要让 u...
阅读全文
摘要:在迷宫中找一条通路,如果不通,原路返回到岔口,继续上下左右寻找,每到一处都要做上标记:如下算法:#include #include #include using namespace std;//从TXT文件中获取迷宫void GetMazeMap(int* a, in...
阅读全文
摘要:vector: 又名 向量 1.C++中的一种数据结构。2.是一个类。3.相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。A.使用时,加上头文件和命名空间即可: #include ...
阅读全文
1

浙公网安备 33010602011771号