数据结构
文章平均质量分 64
YAIMZA
这个作者很懒,什么都没留下…
展开
-
平衡二叉树——判断该树是不是平衡树
判断该树是不是平衡树1. 递归空间复杂度:深度 log2N(表示log以2为底N的对数)时间复杂度:O(n^2)(递归的次数*每次递归的次数) 每个节点的遍历*高度(也是遍历整个树)代码:int _Depth(Node* root) { if (NULL == root) return 0; ...原创 2018-03-29 20:50:47 · 1172 阅读 · 0 评论 -
C++实现 栈和队列
栈(Stack) 栈(Stack): 是只允许在末端(栈顶)进行插入和删除的线性表。 性质:具有先进后出(FILO),后进先出(LIFO,Last In First Out)的性质.两种实现方式:一种是顺序存储,和数组类似。 一种是链式存储,和单链表类似。主要实现的接口:void Push(const T& x);// 从栈顶插入一...原创 2018-06-16 15:32:47 · 1859 阅读 · 1 评论 -
后缀表达式 / 逆波兰表达式
后缀表达式 / 逆波兰表达式运算表达式:a + b:中缀表达式 原因是运算符号在两个运算对象的中间。 + - a * b c d:前缀表达式 运算符在运算对象前面, 又称为波兰表达式。 a b c * - d +:后缀表达式运算符在运算对象后面, 又称为逆波兰表达式(RPN,Reversed Polish Notation)。 后缀表达式的优点 :1. 相较于...原创 2018-06-25 12:27:29 · 1382 阅读 · 0 评论 -
栈和队列的面试题
栈和队列面试题1.实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1) 2.使用两个栈实现一个队列 3.使用两个队列实现一个栈 4.元素出栈、入栈顺序的合法性。如入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1) 5.一个数组实现两个栈 1.实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min...原创 2018-06-19 17:49:29 · 391 阅读 · 0 评论 -
二叉树常见的面试题—C++实现
1. 前序/中序/后序遍历(递归&非递归) 2. 层序遍历 3. 求二叉树的高度4. 求叶子节点的个数5. 求二叉树第k层的节点个数6. 判断一个节点是否在一棵二叉树中7. 求两个节点的最近公共祖先8. 判断一棵二叉树是否是平衡二叉树9. 求二叉树中最远的两个节点的距离10. 由前序遍历和中序遍历重建二叉树(前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1...原创 2018-06-26 16:49:27 · 2320 阅读 · 0 评论 -
【LeetNode】permutations & permutations-ii( 递归法实现 和STL中的next_permutation函数实现)
next_permutaion和prev_permutationSTL中迭代器范围内的排列算法,next_permutaion和prev_permutation即是。头文件:#include <algorithm>函数原型:bool next_permutation(iterator start, iterator end);next_permutation...原创 2018-07-11 22:30:32 · 283 阅读 · 0 评论 -
C++STL关联式容器---map和set常用的接口用法以及map和set的区别
setK模型 :set里面每个元素只存有一个key,它支持高效的关键字查询操作,比如检查一个关键字是否在set中或者在 某些文本处理过程中可用set保存想要忽略的单词set的常用接口:begin() 返回set容器的第一个元素end() 返回set容器的最后一个元素rbegin 返回的值和end()相同rend(...原创 2018-07-14 00:03:33 · 2766 阅读 · 2 评论 -
【leetcode】Construct Binary Tree from Inorder and Postorder Traversal----C++实现
class Solution {public: TreeNode *createTree(vector<int> &inorder,int InBegin,int InEnd, vector<int> &postorder,int PostBegin,int PostEnd){ if( InBegin原创 2018-08-19 17:13:25 · 224 阅读 · 0 评论 -
C++实现最大堆和最小堆
堆堆数据结构是一种数组对象,它可以被视为一颗完全二叉树结构(或者也有可能是满二叉树) 最大堆:任一结点的关键码均大于等于它的左右孩子的关键码,其中堆顶的元素最大。(任一路径中的元素升序排列) 最小堆:任一结点的关键码均小于等于它的左右孩子的关键码,其中堆顶的元素最小。(任一路径中的元素升序排列) 已知父节点:左孩子节点 = 2*父节点+1 右孩子节点 = ...原创 2018-08-19 20:47:17 · 8233 阅读 · 1 评论 -
C++中的String的常用函数用法总结
一. string的构造函数的形式: string str:生成空字符串string s(str):生成字符串为str的复制品string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值string s(cstr, char_len):以C_string类型cstr的前char_len个字...原创 2018-08-27 09:15:36 · 371396 阅读 · 76 评论 -
C++STL基本容器的使用
序列式容器 & 关联式容器C++中有两种类型的容器:序列式容器和关联式容器 序列式容器:主要有vector、list、deque等;其中vector表示一段连续的内存地址,基于数组的实现;list表示非连续的内存,基于链表实现的;deque与vector类似,不同之处就是:对于首元素提供删除和插入的双向支持(c++标准建议:vector是那种应该在默认情况下使用的序列。如果大多...原创 2018-08-23 14:24:43 · 623 阅读 · 0 评论 -
C++实现常用八大排序算法—实现及其对比
算法之间 时间复杂度.空间复杂度.稳定性的比较:ps:希尔排序,当N大时,平均的时间复杂度,大约在N^1.25–1.6N^1.25之间。 选择排序算法准则:每种排序算法都各有优缺点。 影响排序的因素有很多,平均时间复杂度低的算法并不一定就是最优的。相反,有时平均时间复杂度高的算法可能更适合某些特殊情况。同时,选择算法时还得考虑它的可读性,以利于软件的维护。一般而言,...原创 2018-06-15 22:06:40 · 32696 阅读 · 4 评论 -
归并排序算法详解及其优化
归并排序算法:思想:分治法每个递归过程涉及三个步骤 第一, 分解: 把待排序的 n 个元素的序列分解成两个子序列, 每个子序列包括 n/2 个元素. 第二, 治理: 对每个子序列分别调用归并排序__MergeSort, 进行递归操作 第三, 合并: 合并两个排好序的子序列,生成排序结果. void __MergeSort( int *a, int left, int ...原创 2018-06-15 21:52:27 · 2977 阅读 · 0 评论 -
迷宫问题
题目描述迷宫是一个二维矩阵,其中1为墙,0为路,入口在第一列,出口在最后一列。 要求从入口开始,从出口结束,按照 上,下,左,右 的顺序来搜索路径.并且求出最短路径。思想用回溯法,另外递归是天然的回溯法。下面是具体的实现代码:#pragma once#include <iostream>#include <stack>usin...原创 2018-06-22 22:51:10 · 658 阅读 · 0 评论 -
平衡搜索树—红黑树RBTree
红黑树红黑树是一颗二叉搜索树,它在每一个节点上增加了一个存储位来表示节点的颜色,可以是Red或是Black。通过对任何一条从根到叶子简单路径上的颜色的约束,红黑树保证最长路径不超过最短路径的两倍,因而近似平衡。红黑树的性质每个节点,不是红色就是黑色;根节点是黑色;如果一个节点是红色的,那么它的子节点都是黑色的;对于每一个节点,从该节点到其多有的后代叶子节点的简单路径上,...原创 2018-03-29 22:42:18 · 225 阅读 · 0 评论 -
【C++实现文件压缩项目】基于Huffman树实现文件压缩和解压
首先,我们将文件压缩这个项目分为五个步骤: 1. 统计字符出现的次数 2. 构建HuffmanTree 3. 生成哈夫曼编码 (Huffman Code) 4. 压缩 (compress) 5. 解压缩 (uncompress) Huffman树 ,又称为最优二叉树,是加权路径长度最短的二叉树。【贪心算法】是指在问题求解时,总...原创 2018-04-07 23:06:56 · 3869 阅读 · 3 评论 -
平衡搜索树-AVLTree
AVL树又称为高度平衡的二叉搜索树。它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度。AVL树的性质左子树和右子树的高度之差的绝对值不超过1树中的每一个左子树和右子树都是AVL树每个节点都有一个平衡因子,任一节点的平衡因子是-1或0或1.(每个节点的平衡因子等于右子树的高度减去左子树的高度,即:bf = rightHeigh - leftHeight)...原创 2018-03-27 00:07:33 · 5438 阅读 · 0 评论 -
HashTable——哈希表(散列表)
哈希表: 哈希表/散列表 :是根据关键字(key)而访问在内存位置的数据结构。 其方法是 :它通过一个关键值的函数将所需的数据映射到表中的位置来访问数据,这个映射函数叫做散列函数,存放记录的数组叫做散列表(哈希表)。构造哈希表的几种方法: 直接定址法 —取关键字的某个线性函数为散列地址,Hash(key) = key 或 Hash(key) = i key+ j...原创 2018-04-26 22:51:41 · 306 阅读 · 0 评论 -
常见的七种排序算法(插入排序—直接插入排序和希尔排序)
算法之间 时间复杂度.空间复杂度.稳定性的比较:ps:希尔排序,当N大时,平均的时间复杂度,大约在N^1.25–1.6N^1.25之间。 直接排序: 直接插入排序 希尔排序 直接插入排序 :思想:将数组中的所有元素依次和前面的已经排好序的元素相比较(依次),如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 代码...原创 2018-05-18 00:11:30 · 337 阅读 · 0 评论 -
大数据面试题—数据结构
1)给⼀个超过100G⼤⼩的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 2)与上题条件相同,如何找到top K的IP?如何直接⽤Linux系统命令实现? 3)给定100亿个整数,设计算法找到只出现⼀次的整数 4)给两个⽂件,分别有100亿个整数,我们只有1G内存,如何找到两个⽂件交集 5)1个⽂件有100亿个int,1G内存,设计算法找到出...原创 2018-05-12 22:44:27 · 1798 阅读 · 0 评论 -
选择排序—选择排序和堆排序
选择排序: 选择排序 堆排序原创 2018-05-19 10:30:56 · 226 阅读 · 0 评论 -
直接插入排序和冒泡排序比较
直接插入排序 :思想:将数组中的所有元素依次和前面的已经排好序的元素相比较(依次),如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 代码实现:Sort.h:#pragma once#include <iostream>using namespace std;#include <assert.h&a原创 2018-05-30 23:27:45 · 6590 阅读 · 1 评论 -
快速排序算法—左右指针法,挖坑法,前后指针法,递归和非递归
快速排序算法 快速排序算法的思想:分治法快速排序算法——递归方法一:左右指针法基本思路: 1.将数组的最后一个数end作为基准数key。 2.分区过程:从数组的首元素begin开始向后找比key大的数(begin找大);end开始向前找比key小的数(end找小);找到后然后两者交换(swap),知道begin >= end终止遍历。最后将begi...原创 2018-05-31 12:26:52 · 13138 阅读 · 7 评论 -
C++STL序列式容器---vector和list常用的接口用法以及vector和list的区别
序列式容器vector :vector采用一段连续的内存来存储其元素,向vector添加元素的时候,如果容量不足,vector便会重新malloc一段更大的 内存,然后把原内存中的数据memcpy到新的内存中,并free原内存块,然后将新元素加入。 vector的元素插入性能跟以下几个要素关系重大: 1. 插入的位置 头部插入:将所有元素后移,然后将新...原创 2018-08-23 17:08:40 · 1323 阅读 · 0 评论