算法&&数据结构
文章平均质量分 72
叫我豆黄
向善
展开
-
如何用一维数组实现两个栈的基本操作
数组在内存中是按顺序存放的,那么在实现栈的时候刚好就可以取最后一个元素即为栈顶,第一个栈实现还是很简单的,重点在于第二个栈如何在数组中存放,才会让操作变得简单。由图可以看出 ,在第二个栈存放时,我们可以倒着存放,从数组最后一个序号开始,这样的话也能很容易的取到栈顶。template <class T>class TwoStackByArray{public: TwoStack...原创 2018-01-06 19:07:07 · 677 阅读 · 0 评论 -
哈希(闭散列)开放定址法实现
之前一篇博文中提过如何用开链法实现哈希表这里是链接那么对于哈希表的实现,还有另外一种方法的实现,这就是哈希开放定址法来实现。该方法也是用来处理哈希冲突的。解决思想如下:现有关键字17,60,29,38如何确定地址??可以看见该表的长度为11,那么使用关键字取余该表的长度,得到的余数就是该关键字的地址,17则余6,60则余5,29则余7,那么38也余了5,但是5这个地址已经存在关键字了,所以采用一种...原创 2018-05-06 22:39:13 · 396 阅读 · 0 评论 -
二叉树の把二叉树打印成多行&序列化二叉树
二叉树是一棵有层序的树,现在要求是把这棵树打印为每一层结点的值在一行即如图形式:使用数组形式的vector来存储每一行的元素,然后再将存有元素的vector存储到另一个vector里,这样打印出来的就是分别每一行元素/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; ...原创 2018-05-04 16:27:01 · 146 阅读 · 0 评论 -
链表の如何判断一个链表带环以及找到环的入口
对于链表的题目真的是超级多,想要每道题都弄懂其实不难,只要掌握方法,掌握思想,做好边界检查,弄清每道题的题意,那么就可以举一反三,也不那么容易写出崩溃的代码。对于如何判断一个链表带环这个问题,可以这样来分析它如图是一个带环的链表,首先可以使用两个指针同指向链表的第一个节点,其中一个叫slow,另一个叫fast。其次让slow这个指针每次走一步,fast每次走两步,图中每个指针旁边的数字代表它所走的...原创 2018-05-04 11:25:10 · 1467 阅读 · 0 评论 -
二叉树の判断一个二叉树是否是另一个二叉树的子树
判断一棵二叉树是否是另一个二叉树的子树,主要分为两个步骤:首先由下图看出,当判断是否为子树时,需要判断每个节点的值是否相等其次,如果相等的话,对于其左右子树是否相等也需要进行相同的判断,则可使用递归来完成。需要注意的是,需要考虑边界的判断,如果子树为空的情况,或者只有一个子树的情况。/*struct TreeNode { int val; struct TreeNode *left; st...原创 2018-05-04 10:33:50 · 890 阅读 · 1 评论 -
哈希开链法实现
哈希表在对于查找方面是很快捷方便的,哈希是一个映射,对于关键字映射在哈希表里的位置是随机的,但也是有要求的,对于关键字的映射不能超出表的范围。但对于不同的关键字,可能会映射到同一个哈希位置上,这样就会产生哈希冲突。哈希冲突只能尽可能的减少,但是不能避免。处理哈希冲突的方法:1、开放定址法该处理方法有线性探测再散列和二次探测再散列两种处理方式,前者是将出现的冲突进行+1,如果下一个仍旧冲突,在原本的...原创 2018-05-01 17:31:29 · 597 阅读 · 0 评论 -
浅谈map,multimap,set,multiset的使用
map ,set属于STL里的组件,叫做标准关联容器。标准关联容器的典型实现是平衡二叉查找树。一个平衡二叉查找树是一个对插入、删除和查找的混合操作优化的数据结构。换句话说,它被设计为应用于进行一些插入,然后一些查找,然后可能再进行一些插入,然后也许一些删除,然后再来一些查找,然后更多的插入或删除,然后更多的查找等。这个事件序列的关键特征是插入、删除和查找都是混合在一起的。一般来说,没有办法预测...原创 2018-04-13 11:11:43 · 275 阅读 · 0 评论 -
##数据结构##输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树
二叉树是数据结构中比较重要的一部分,通过给定的二叉树可以进行前序中序和后序遍历,但是反过来,如果给定前序遍历和中序遍历,是否可以重建出一棵二叉树。答案是,可以。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *...原创 2018-04-06 17:40:02 · 216 阅读 · 0 评论 -
使用栈实现迷宫
迷宫是个益智的小游戏,但是就算是个小游戏也会有外挂吧,那么就来写一个小小的迷宫来玩玩吧(虽然是程序自己走的。。)但是这个不重要,重要的是,我不用烧脑玩迷宫啊~//面向对象实现迷宫#include<stack>struct Pos{ int _row; //行 int _col; //列};template<size_t N>class Maze{...原创 2018-04-06 17:22:26 · 1051 阅读 · 0 评论 -
AVL树浅析
AVL树被称为高度平衡的二叉搜索树,尽量降低二叉树的高度,来保持二叉树的平衡,减少树的平均搜索长度。AVL树的性质:1、左子树和右子树的高度之差(绝对值)不超过1 2、树中的每棵子树都是AVL树, 3、每个节点都有一个平衡因子,取值为(-1,0,1),通过平衡因子来判断树的平衡。AVL树的插入需要考虑以下的...原创 2018-03-30 10:53:10 · 206 阅读 · 0 评论 -
##数据结构##堆的建立以及堆排序的实现
有二叉树可以引申出堆,堆分为大堆和小堆,并可以在数据量很大的情况下以相当快的效率使用堆排序来计算出最大或者最小的前k个数#include<iostream>#include<stdlib.h>#include<vector>#include<assert.h>using namespace std;template<class T&g...原创 2018-03-14 11:21:55 · 383 阅读 · 0 评论 -
##数据结构##如何创建一棵哈夫曼树并实现堆
哈夫曼树是一种二叉树,但是它是一种加权路径长度最短的二叉树。其可用堆来实现它的构建其构建方法如下://heap.h//仿函数template<class T>struct Less{ bool operator()(const T& left, const T& right)const { return left < right; }};...原创 2018-03-17 21:25:19 · 726 阅读 · 0 评论 -
##C++##逆置链表的升级版(k个节点的逆置)
逆置链表之前写过整条链表的逆置,今天在一本书上看到了关于k个节点的逆置。关于k个节点的逆置有两个方法方法一:利用栈来实现这个逆置,当进栈的个数达到了k个之后,就进行出栈操作,而当不足k个时,则直接连接在新链表的后面方法二:记录链表的第一个位置,走k步之后记录尾节点,并记录尾节点的next,然后将尾节点的next置空,逆置这段新链表,以此类推 知道这段链表的结束。代码实现如下://方法1:Nod...原创 2018-03-11 11:18:32 · 229 阅读 · 0 评论 -
##数据结构##冒泡排序,选择排序以及插入排序的算法实现
这三种排序的时间复杂度都为O(n^2)//冒泡排序class BubbleSort {public: int* bubbleSort(int* A, int n) { // write code here int i,j; for(i = 0;i<n-1;++i) { for(j = 0;j&...原创 2018-03-16 15:25:32 · 182 阅读 · 0 评论 -
##数据结构##二叉树的三种遍历,以及求叶子节点,第k层,求树的高度等代码实现
树:n个有限数据元素的集合结点:包含了数据和指向其他结点的指针结点的度:结点拥有的子节点的个数高度:树当中距根节点最远系欸但的路径长度前序遍历:根 左子树 右子树中序遍历:左子树 根 右子树后序遍历:左子树 右子树 根#include<iostream>#include<queue>#include<stack>using namespace s...原创 2018-01-07 17:44:09 · 527 阅读 · 0 评论 -
对于解密算法的学习
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。 MD5算法具有以下特点: 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。 2、容易计...原创 2018-06-15 17:07:59 · 209 阅读 · 0 评论