
数据结构的实现与分析
woniu317
开始刷leetCode,补充基础。个人邮箱:woniu317@126.com
展开
-
QuadTree c++实验结果
QuadTree实验报告1. 实验数据以及实验环境数据集一:City of Oldenburg (OL) Road Network结点个数:6105数据集二:Road Network of North America (NA)结点个数:175813实验环境:windows7,VS20122. 实验结果表2-1 实验结果数据集原创 2014-02-18 20:37:52 · 2333 阅读 · 0 评论 -
查找第一个与最后一个key值位置
1. 题目存在一个非递减有序序列data,如{1,2,3,3,3,3,4,5},注意允许有相同元素。(1) 求与key相同的第一个元素所在的位置。(2) 求与key相同的最后一个元素所在的位置。2. 分析该序列有序因此利用折半可以提高查找效率,查找时间复杂度O(logN),其中N为序列长度。对于问题(1):利用折半操作有s、middle、e三个指针,初始分别指向data的头原创 2015-04-04 16:50:26 · 1101 阅读 · 0 评论 -
二叉搜索树转化为双向链表
1. 题目输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。而且在转换的过程中,不能创建任何新的结点,只能调整树中的结点指针的指向来实现。二叉树结点的定义如下:struct BinaryTreeNode{ intm_nValue; BinaryTreeNode*m_pLeft; BinaryTreeNode*m_pRight原创 2015-03-21 21:17:27 · 735 阅读 · 0 评论 -
树的子结构
树的子结构1. 题目输入两棵二叉树A和B,判断B是不是A的子结构。二叉树定义结构如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode*m_pLeft; BinaryTreeNOde*m_pRight;};例如图1-1(a)中红色部分和(b)的结构相同:对应位原创 2015-03-19 15:30:39 · 990 阅读 · 0 评论 -
枚举集合划分方案
1. 题目 有n个互不相同的整数,将其划分成m个均不为空的集合,枚举所有的划分方案。 2. 分析 (1)该问题明显不同于整数划分问题(http://blog.youkuaiyun.com/woniu317/article/details/39250403 ),整数划分问题等价于划分有n个元素集合的方案总数,且集合中的元素相同,因为若不同即使个数相同划分方案也为不同。 (2) 易得该问题属于典型的回溯问题原创 2015-03-15 22:15:08 · 1342 阅读 · 0 评论 -
图存储与遍历的一些技巧
图的存储有多重方式,即使都是邻接表也会有不同的形式。同时图的遍历采用一些小技巧可以加速图的遍历效率,从而提高程序的执行效率。原创 2015-02-27 14:33:17 · 1645 阅读 · 0 评论 -
STL中排序算法
[1] push_heap:默认为大根堆,主要是上滤操作。[2] make_heap:创建堆,默认构建大根堆。他的实现基于这样一个简单的想法:将二叉树中的每个仅二层的子树都构成堆,那么整个数据集的布局几乎即可以满足堆的定义。[3] pop_heap:将已构成堆的迭代器区间中最大值元素移到区间的最后元素位置。原来的最后元素调整为根结点元素后,再对除最后一个元素之外的区间调整原创 2014-12-18 14:59:43 · 902 阅读 · 0 评论 -
改进hash遍历
STL中实现的hash_map和MFC中实现的CMap数据结构均为hash。普通的hash在遍历时,效率会比较慢。hash_map与CMap的遍历均顺序访问每一个桶,因此会在空桶上浪费一定的时间。1. 改进的hash哈希结点结构如图1-1(a)所示,其中data为存储的数据,next为指向下一个哈希结点的指针。哈希头结点如图1-1(b)所示,其中preBucket为前一个有数据的桶号,ne原创 2014-12-25 15:34:36 · 1031 阅读 · 0 评论 -
STL中常用数据结构
STL中常用的数据结构:[1] stl中stack、queue默认的底层实现为deque结构。[2] deque:用map管理多个size大小的连续内存块,方便头尾插入。[3] vector:变长动态数组,每次增大1.5倍,删除元素时不释放空间。[4] priority_queue底层默认采用vector向量O(nlogn)。[5] list:双向链表容器。[6]原创 2014-12-16 10:23:58 · 2852 阅读 · 0 评论 -
STL非变易算法
非变易算法:原则上不会变更操作数据的算法。[1] for_each:逐个容器元素,原型for_each(InputIter first, InputIter last, Function f)。[2] find:顺序查找容器元素,原型InputIter find(InputIter first, InputIter last, constT &val, input_iterat原创 2014-12-17 21:53:41 · 767 阅读 · 0 评论 -
vector增删数据容器大小变化
vector容器增删改查数据时容量大小的变化,当增加元素时若容器不够大则将容器扩展为原来大小的1.5倍;删除元素时容器大小不发生任何变化。原创 2014-11-16 17:27:01 · 2148 阅读 · 0 评论 -
世界杯座位选择顺序总数
1. 问题假设世界杯观看台上有n个座位,游客们来到这里自由占位。一般情况下,一个游客首先考虑的座位肯定是两边都没人的座位,其次考虑的是一边没人的座位,最后没得考虑,只能随便选一张两边都是人的座位。 假设有n个游客依次到场占位,每个人都是按照上述规则选择自己的位子,求这n个游客占位的可能顺序有多少种?输入描述: 有多组测试数据,每组测试数据包括一个正整数n(0输出描述:对于每组数据,原创 2014-06-24 11:19:45 · 1703 阅读 · 2 评论 -
最短路径之迪杰斯特拉与双向迪杰斯特拉实验结果
该文章对迪杰斯特拉与双向迪杰斯特拉的实现结果进行了简单的分析。原创 2014-05-14 14:10:02 · 3078 阅读 · 4 评论 -
整数对A满足二叉查找树,B满足最大堆
1 题目给出一组整数对 { (a[0], b[0]), (a[1], b[1]) ... (a[n-1], b[n-1]) },所有 a 值和 b 值分别不重复(任意 i != j 满足 a[i] != a[j] 且 b[i] != b[j])。构造一棵 n 结点的二叉树,将这 n 个整数对分配到各个结点上。根和所有子树满足以下条件:1) 所有结点的 a 值满足二叉查找树的顺序,即 left-原创 2015-08-23 14:14:29 · 1057 阅读 · 0 评论