自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 哈希详解以及实现(开放定址法和拉链法)

我们在平时使用的顺序结构(顺序表等)和平衡树中,元素的关键码和其存储位置之间没有对应关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序表的时间复杂度为O(N),平衡树的时间复杂度为为树的高度,即O(log2N),搜索的效率取决于搜索过程中元素的比较次数。一种理想的搜索方法:可以不经过比较,一次直接得到要搜索的元素,如果构造一种存储结构,通过某种函数,使元素的存储位置和关键码能够建立一一...

2019-01-28 23:40:00 11239 1

原创 STL——map和set模拟实现

map和set的底层是使用红黑树来实现的,接下来我利用红黑树来模拟实现一下map和set。map详解博客链接:https://blog.csdn.net/smx_dd/article/details/86531881set详解博客链接:https://blog.csdn.net/smx_dd/article/details/86555973红黑树详解与实现博客链接:https://blog....

2019-01-26 15:05:36 369

原创 红黑树的详解与实现

红黑树也是一种二叉搜索树,顾名思义,红黑树是节点为黑色或者红色的一棵二叉搜索树。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树与AVL树的比较:红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O(log2N),红黑树不追求绝对平衡,其只需保证最长路径不超过最短路径的2倍,相对而言,降低了插入和旋转的次数...

2019-01-24 23:24:28 185

原创 AVL树的详解与实现

之前详细讲解过了二叉搜索树(二叉搜索树详解博客链接:https://blog.csdn.net/smx_dd/article/details/86563142),但是二叉搜索树有缺陷,那就是当插入数据有序时,会退化成单支树,查找效率相当于一个链表。为了解决上述问题,有这样一种办法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降...

2019-01-21 20:28:52 1443

原创 二叉搜索树

二叉搜索树是一种特殊的二叉树,具有以下性质:1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。3.它的左右子树也分别为二叉搜索树。空树也是一颗二叉搜索树。二叉搜索树的中序遍历是有序的。二叉搜索树的查找:从根结点开始查找,若节点为空则返回 false;若不为空:1. 若节点大小大于要查找的节点,...

2019-01-20 16:46:06 267

原创 STL关联式容器(2)——set和multiset

一、set1. 在 set 中,元素的 value 也标识它( value 就是key,类型为 T ),并且每个 value 必须是唯一的。set 中的元素不能在容器中修改(元素总是 const),但是可以从容器中插入或删除它们。2.与map/multimap不同,map/multimap中存储的是真正的键值对<key, value>,set 中只放 value,但在底层实际...

2019-01-19 20:43:54 210 3

原创 STL关联式容器(1)——map和multimap

一、什么是关联式容器STL中的部分容器,像 vector、list、deque、forward_list 等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它和序列式容器有什么区别?关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。二、...

2019-01-18 20:31:26 254

原创 stl——容器适配器

适配器是一种设计模式,将一个类的接口转换为另外一个类接口。在 stl 中,常见的容器适配器有 stack、queue 和 priority_queue。容器适配器就是将特定容器类封装作为其底层容器类。在标准 stl 中,stack和queue默认底层容器都是deque。其实作为容器适配器,底层可以是任意的标准容器类模板之一,如果没有实例化指定底层容器,底层都默认是deque。他们只支持栈顶或者...

2019-01-17 18:05:21 372

原创 stl——模拟实现list

list 是最常用的 stl 库之一,它的底层就是一个带头的双向循环链表,所以我们在使用时也可以把它想象成这种链表。下面我们模拟实现list。在模拟实现 list 之前,我们首先要明确 list 的迭代器。迭代器的类型有两种,第一种就是原生态的指针,例如vector的迭代器。第二种就需要我们自己来封装,因为迭代器的使用和指针类似,所以我们需要明确一下几点:1. 对 operator*()进行...

2019-01-14 22:42:15 150

原创 stl——模拟实现vector

对于vector相信大家并不陌生,这里介绍一些重要的vector的接口和用法。1. 构造函数vector(); 无参构造vector(size_type n, const value_type& val = value_type()); 构造并初始化n个valvector (InputIterator first, InputIterator last); 利用迭代器进行构造。...

2019-01-13 16:03:09 394

原创 C++模拟实现string类

对于 string 类一定并不陌生,我们重点介绍一部分接口。1.void resize(size_t n,char c); 将字符串大小改变,如果大小是增加则后面添加字符 c,减少则保留前 n 个字符。2.void resize(size_t n); 和上面一样,只是默认添加字符为 '\0'。3.void reserve(size_t n); 扩容。4.size_t find(c...

2019-01-11 15:46:53 391

原创 C++知识——多态

多态概念在面向对象中,多态就是指不同对象收到相同消息时,产生不同的行为。一个源程序经过编译、链接,成为可执行文件的过程是把可执行代码联编在一起的过程。其中在运行之前就完成的联编称为静态联编,而在程序运行时才完成的联编叫动态联编。静态联编是指系统在编译时就决定如何实现某一动作。静态联编要求在程序编译时就知道调用函数的全部信息。因此,这种联编类型的函数调用速度很快。效率高是静态联编的主要优点。...

2019-01-08 15:17:25 275

原创 C++知识——继承

继承概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。继承有三种方式:公有继承(public)、保护继承(protected)、私有继承(private...

2019-01-07 00:21:29 435 2

原创 C++单例模式

一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。为什么要有单例模式?对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统等等。在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹...

2019-01-04 15:54:40 2610 1

原创 C++内存管理

我们首先来看一下C++中程序内存区域的划分1. 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。3. 堆用于程序运行时动态内存分配,堆是可以上增长的。4. 数据段--存储全局数据和静态数据。5. 代码段--可执行的代码/只读常量C++中内存管理方式...

2019-01-03 23:02:11 142

原创 C++知识点——类和对象

一、面向对象三大特性之一——封装封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。1. C++中struct与class的区别:struct 中默认成员为公有 public ;而 class 中默认成员为私有 private 。在C语言中 struct 中只能声明成员变量,不能声明成员函数函数,但是C++中 struct 可以声明成员函数。...

2019-01-01 20:03:19 3043

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除