
数据结构
文章平均质量分 60
鱼忆七秒呐
这个作者很懒,什么都没留下…
展开
-
迷宫求解
如何将迷宫定义出来,这里我们用的是文件。在mazemap.txt中将迷宫输入好保存,‘1’代表不通,‘0’代表通。然后从文件中读出来,保存在一个二维数组中,打印到屏幕上。 迷宫是一种栈的应用。那怎么用栈求解迷宫呢。定义一个空栈,每走一步,将坐标push到栈中,往那个方向走,四个方向依次判断,当此时的四个方向都不通时,栈后进先出,出栈,判断当前其它方向是否通。就这样通就进栈,不通出栈判断其它方向,当栈原创 2017-03-11 16:09:59 · 512 阅读 · 0 评论 -
对称矩阵与稀疏矩阵(转置)
对称矩阵:n*n的方阵,对于矩阵的任意元素,aij=aji时(i和j都大于等于0小于n) 因为该矩阵的上三角和下三角的数据相同,为了节省空间,我们可以只存储下三角或上三角的元素,这种存储方式称为矩阵的压缩 矩阵压缩后的结构就可以是一个一维数组。 存储的个数是n*(n+1)/2(等差数列),任意元素在一维数组中是array[i*(i+1)/2+j]; 对称矩阵的压缩储存#define _C原创 2017-03-17 12:47:39 · 737 阅读 · 0 评论 -
STL中map-set的使用
map:是一种key/value的模板类(容器),它的底层是实现是红黑树。 map中它将key/value封装成了一个结构体。template<class K,class V> struct pair { K first; V second; pair(const K& key,const V& value) :first(key) ,second(valu原创 2017-04-20 17:06:54 · 441 阅读 · 0 评论 -
小项目-文件压缩(哈夫曼树)
先回顾一下哈夫曼树 huffman树即最优二叉树,是加权路径长度最短的二叉树。哈夫曼树的树使用贪心算法。 每次选择该集合中权值最小的两个作为叶子结点,父亲节点的权值为叶子节点权值之和。然后又将其父亲重新放进此集合里。重复前面的做法,直到完成哈夫曼树的建立。 每次都要在集合中找出2个权值最小的。这里我们就可以建立一个小堆,每次找出最小的时候只需要向上调整堆就行了。 那么文件哈夫曼树怎么实现原创 2017-04-21 11:44:56 · 1058 阅读 · 0 评论 -
并查集
引出: 一些应用问题中,需要将n个不同的元素划分成一组不想交的集合。开始时,每个元素自成一个单元素集合,然后按一定规律将归于同一组的元素合并。还可以查询这个 元素是否在这个集合中,描述这种数据类型就称为并查集。 假设一个集合s={0,1,2,3,4,5,6,7,8,9},初始化时每个元素称为一个单元素集合。 现在我们将其合并成三个集合s1={0,6,7,8},s2={1,4,9},s3={原创 2017-05-23 17:11:12 · 227 阅读 · 0 评论 -
大数据问题(九章算法)
这些问题都面临着一个内存不够用的问题。 1.给一个超过100G大小的 log file,log中存着IP地址,设计算法找出出现次数最多的IP地址? 由于超过100G,那必须对文件进行切分。 (1)切分,可以切成100份,每份有1G,那哈希表的大小就是100,利用字符串哈希算法将字符串IP转换成整型 (2)过哈希切分,同一个ip就会分割到同一个文件。 (3)是依次将这100个文件读入内存中,原创 2017-04-26 16:17:03 · 2834 阅读 · 1 评论 -
剑指offer-用两个栈实现一个队列
栈是先进后出,队列是先进先出 实现: 1.实现push:将元素都push到一个栈中。 2.当是stack1不为空时,将stack1取它的top元素push到stack2中,相对与入stack1的顺序相反,在stack2中pop的时候,就达到的在stack1先进在stack2先出。如果stack2不为空,pop的时候直接取stack2的栈顶元素pop.stack2为空时,先将stack1的元素压原创 2017-04-24 11:51:28 · 657 阅读 · 1 评论 -
快速排序
快速排序算法是一种划分交换的方法,它采用分治法进行排序。 基本思想:取元素序列的某个元素作为基准,将序列划分成左右两个子序列,比这个元素大的或小的放到左边,相对小的或大的放右边,该基准元素则放到中间。然后对此子序列重复上面的方法,直到所有的元素都排在相应的位置。 大体图解 这里我们就可以看到这完全是一个子问题,所以我们想到的第一种方法就是递归实现。void QuickSort(int* a原创 2017-05-16 21:37:19 · 309 阅读 · 0 评论