![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 56
simplehap
这个作者很懒,什么都没留下…
展开
-
设计链表进行插入、删除(面试题)
就链表有多种单链表、双链表、双向循环链表、带头结点的单链表、带头结点的双向链表、带头结点的双向循环链表本次我运用带头结点的双向循环链表同时运用模板实现代码如下:List.h#pragma once#include #include using namespace std;template struct ListNode{ T _data;/原创 2017-02-20 14:46:12 · 518 阅读 · 0 评论 -
HashTable哈希表/散列表(线性探测和二次探测)
HashTable的简单介绍HashTable是根据关键字直接访问在内存存储的数据结构。 HashTable叫哈希表或者散列表。 它通过一个关键值的函数将所需的数据直接映射到表中的位置来访问数据,这个映射函数叫散列函数(哈希函数),存放记录的数组叫散列表(哈希表)。比如: 给定一字符串“abckhdgubhkacdggk”找出第一次只出现一次的字符。原创 2017-04-24 17:35:07 · 24828 阅读 · 2 评论 -
BitSet位图
存储空间的计算1int为4个字节(byte) 1byte为8个 比特位(bit) 1kb = 1024 byte 1Mb = 1024 kb 1Gb = 1024Mb 1Tb = 1024Gb位图腾讯题:给40亿个不重复的无符号整型,没排过序。如何快速判断这个数存不存在? 如果内存允许,可以先进行排序,再用二分查找进行查找。但是40亿个无符号整型存储在内存中需要16G。 如果用位图原创 2017-05-03 10:58:33 · 381 阅读 · 0 评论 -
HashTable哈希表/散列表(哈希桶)
哈希桶的结构处理哈希冲突的开链法/拉链法 —-哈希桶 使用素数做哈希表的长度,可以降低哈希冲突 哈希桶的插入、删除、查找原创 2017-05-02 11:27:04 · 1387 阅读 · 0 评论 -
AVL树(平衡二叉树)
AVL树的概念一棵AVL树,要么是空树,要么是具有下列性质的二叉搜索树:它的左子树和右子树都是AVL树,且左子树和右子树的高度之差的绝对值不超过1。平衡因子每个节点都有一个平衡因子,任一节点的平衡因子是-1,0,1。每个节点的平衡因子等于右子树的高度减去左子树的高度。AVL树的效率如果一棵搜索二叉树的高度是平衡的,它就是AVL树。如果它有N个节点,它的高度保持在O((log2)N)原创 2017-04-06 20:48:35 · 385 阅读 · 0 评论 -
C++实现斐波那契数列 时间复杂度 空间复杂度
斐波那契数列我写了四种实现方法:第一种:递归实现long long Fib(int n)//递归{ if (n < 2) { return n; } return Fib(n - 1) + Fib(n - 2);}时间复杂度:O(2^n)空间复杂度:O(n)第二种:非递归实现long long FibNouR(int n)//非递归{ long long f原创 2017-03-01 12:40:30 · 1970 阅读 · 0 评论 -
二叉树的存储方式和遍历方式
二叉树:二叉树的每个节点至多有两个子树。如这个二叉树,其中1,2有两个子树,3只有左子树,5有右子树,4,6,7没有子树。二叉树有两种存储方式:第一种,数组表示。用数组存储方式就是用一组连续的存储单元存储二叉树的数据元素。 两颗树分别用数组表示为:原创 2017-03-20 17:46:17 · 21982 阅读 · 1 评论 -
二叉树的补充(非递归遍历)
上篇写了二叉树的递归遍历(前序,中序,后序)。但递归也有缺点:递归太深,空间有限,会导致栈溢出。(这个栈是内存管理分段、局部对象存储区域,属于操作系统内容)递归也可以转为非递归。其中有两种方法:第一种:将递归转为循环。比如:斐波那契数列和求前N项和。第二种:用栈进行解决。(这个栈是数据结构中的)不是所有递归都能用循环实现,比如:单链表的逆序打印和二叉树的遍历。下面的原创 2017-03-21 20:47:19 · 709 阅读 · 0 评论 -
线索化二叉树
二叉树是一种非线性结构,遍历二叉树几乎都是通过递归和借助栈完成的。二叉树作为存储结构时,取到一个节点,只 能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。于是,为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息。这就是二叉树的线索化。中序线索化:前序线索化:后序线索化:代码原创 2017-03-23 08:45:22 · 347 阅读 · 0 评论 -
堆的创建,插入,删除
堆(Heap)可以视为完全二叉树它的数据结构就是数组对象,在堆中,都是以下标进行访问的。堆分为: 最大堆:每个父节点的都大于孩子节点。 最小堆:每个父节点的都小于孩子节点。代码实现:原创 2017-03-23 16:19:29 · 274 阅读 · 0 评论 -
堆的应用
堆的应用:1.优先级队列2.海量数据处理(TopK问题)3.堆排序原创 2017-03-27 12:53:44 · 302 阅读 · 0 评论 -
搜索二叉树
搜索二叉树的性质 1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关 键码互不相同。 2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。 3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。 4. 左右子树都是二叉搜索树。原创 2017-04-03 15:53:05 · 335 阅读 · 0 评论 -
红黑树
红黑树的概念和性质概念:红黑树是一棵二叉搜索树,它在以前的搜索二叉树的基础上每个节点上增加了一个存储位来表示节点的颜色,可以是红的或黑的。通过对任何一条从根到叶子简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。 红黑树的性质: 1. 每个节点,不是红色就是黑色的 2. 根节点是黑色的 3. 如果一个节点是红色的,则它的两个子节点是黑色的…原创 2017-04-08 20:23:51 · 502 阅读 · 0 评论 -
注释转换
C语言的注释 /*C语言*/C++的注释 //C++本文写的注释转换是将C语言注释转换为C++注释大概有这几种情况//1.一般情况/* int i = 0; *///2.换行问题/* int i = 0; */ int j = 0;/* int i = 0; */int j = 0;//3.匹配问题/* i原创 2016-12-13 23:26:37 · 293 阅读 · 0 评论 -
C++菱形继承面试题
问题:1.虚拟继承的作用 2.底层的工作原理1.作用:#include using namespace std;class AA{public: int _aa;};class BB : public AA{public: int _bb;};class CC : public AA{public: i原创 2017-02-15 20:38:33 · 516 阅读 · 0 评论 -
为什么c++支持重载而C语言不支持重载
学过C语言和C++的人都知道,C++支持函数重载而C语言不支持函数重载。而所谓的函数重载就是指:在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同或类型不同),返回值可同可不同。那么问题来了,为什么C++支持函数重载,而C语言不支持呢?从代码的编译到运行,在VC6.0或VS这种编译器下,它是系统直接完成了翻译与链接,直接生成了运行结果。编译器内部完成了翻译部分:原创 2016-12-17 17:43:51 · 4539 阅读 · 6 评论 -
智能指针
什么是智能指针智能指针是C++中的重点之一,这也是在笔试面试中爱考的知识点 理清智能指针十分重要说起智能指针最先要提的就是RAII RAII全称Resource Acquistion Is Initialization 定义一个类来封装资源的分配和释放,在构造函数完成资源 的分配和初始化, 在析构函数完成资源的清理,可以保证资源的正确初始化和释放。那么什么是智能指针?为什么会有智能指针?智能原创 2017-05-09 16:18:54 · 407 阅读 · 0 评论