数据结构
文章平均质量分 88
湛蓝的海
这个作者很懒,什么都没留下…
展开
-
哈希表的插入、查找、删除
散列表(Hash Table,也叫哈希表),是根据关键码值(key value)而进行直接访问的数据结构。它通过关键码值映射到表中的一个位置来访问记录,以加快访问的速度。这个映射函数叫做散列函数,存放的数组叫做散列表。 例如,关键字为k,则把k放在f(k)的存储位置上。由此,不需要比较便可直接获取所查的记录。f()就是这个散列函数,按这个思想建立的表叫做散列表。 对于不同的关键字原创 2016-06-09 13:58:30 · 24863 阅读 · 3 评论 -
文件压缩
项目名称《文件压缩》开发环境:windows,vs2013所用到的技术:heap,哈夫曼树,哈夫曼编码,c++文件压缩项目的大致思路: 1.利用小堆进行构建哈夫曼树,然后利用哈夫曼树获得要压缩的每个字符的哈夫曼编码2.利用哈夫曼编码对源文件进行压缩,就是在压缩文件中按顺序存入各字符对应的哈夫曼编码,并编写配置文件3.利用配置文件获得各个字符及字符出现的次数,再次用小原创 2016-08-01 17:49:10 · 962 阅读 · 0 评论 -
面试题: 求N个数中前k个大的数(大数据)
解题思路:一般思路就是将N个数排序后,取前k个数就ok。但是如果N个数是几十亿个数,加载不到内存怎么办?这就需要另外一种思路了,那就是利用堆。具体的思路是:先建一个k个数的小堆,然后从k+1个数往后的值与堆顶元素比较,若此数比堆顶元素大,就将堆顶元素用这个数替换,然后重新调整堆,以此向后重复上述过程,直到将N个数比较完成,那么此时组成这个堆的k个元素就是前k个大的数。下边是具体实现的代码:原创 2016-06-22 21:50:15 · 9693 阅读 · 0 评论 -
堆排序
堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。(1)用大根堆排序的基本思想① 先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1]原创 2016-06-22 21:21:36 · 322 阅读 · 0 评论 -
二叉树的前、中、后序遍历(递归和非递归)、层序遍历、深度、叶子节点个数
二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n原创 2016-06-22 20:16:05 · 409 阅读 · 0 评论 -
根据前序和中序的遍历序列重建二叉树
依据前序遍历序列和中序序列重构二叉树前序遍历:1,2,3,4,5,6,7中序遍历:3,2,4,1,6,5,7首先分析前序遍历和中序遍历序列的特点:前序遍历:遍历的第一个为根节点中序遍历:以根节点为分隔,根节点之前的全部为左子树,根节点之后的全部为右子树依据这两个性质,要重建二叉树的话,我们就是先找到根节点,然后再分别找出它的左右子树,然后再分别以左右孩子为根原创 2016-07-15 23:28:01 · 577 阅读 · 0 评论 -
单链表的增、删、查、改、逆置、排序
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。以“结点的序列”表示线性表称作线性链表(单链表)单链表是链式存取的结构,为找第 i 个数据元素,必须先找到第 i-1 个数据原创 2016-06-13 16:49:53 · 387 阅读 · 0 评论 -
动态顺序表的增、删、查、改、逆置、排序
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。 线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。具体实现代码如下:#includeusing namespace std;template class SeqList{public: void _C原创 2016-06-13 15:37:41 · 419 阅读 · 0 评论 -
二叉搜索(排序)树的 查找、插入、删除
#pragma once#includeusing namespace std; template struct BinaryNode{ struct BinaryNode* _left; struct BinaryNode* _right; K _key; V _value; BinaryNode(const K& key,const V& value) :_le原创 2016-06-06 01:19:43 · 457 阅读 · 0 评论 -
面试题之对称的二叉树,层序遍历(每层节点打印成一行),平衡二叉树的判断
原创 2016-09-02 22:13:02 · 576 阅读 · 0 评论