自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++多态

多态我们知道继承是代码复用的一种体现,而多态是接口复用的一种体现,即:同一接口不同形态。静多态(函数重载/模板)编译阶段确定函数的调用动多态(虚函数)运行阶段确定函数的调用宏多态(不常用)预编译阶段确定函数的调用动多态:由虚函数机制提供支持虚函数处理机制:①编译阶段:将函数入口地址写入在只读数据段(.rodata段),具体存放在虚函数表(vftale)中。②链接完成后:函数入口地址存放在只读数据段③运行阶段:将指令和数据(虚函数入口地址)加载到内存中虚函数表(vftab

2020-09-26 15:14:02 153

原创 寻找树中两个结点的最低公共祖先

寻找树中两个结点的最低公共祖先Q:在树中寻找两个结点的最低公共祖先,是什么意思呢?A:树是由根节点衍生左右孩子继续衍生左右孩子的左右孩子。所以呢树中的两个结点是一定拥有最低公共祖先(这两个结点Q:是在这个祖先结点衍生的孩子中)至于最低:就是第一个公共祖先。树是二叉树并且是BST树嘛?我们根据BST树(二叉搜索树/二叉排序树)的特性:树中任意结点的val大于左孩子的val。如果该结点是这两个结点的最低公共祖先那么他的val一定是大于等于其中一个结点的val,并且小于另外一个结点的val或者

2020-09-19 13:46:28 330

原创 关于快排的优化

快排优化博客链接:https://blog.csdn.net/qq_38289815/article/details/82718428

2020-08-18 13:27:39 165

原创 关于快速排序的一些分析

快速排序快速排序:由冒泡排序而改进而来。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。上面是一些官方的分析。简单的来讲,快排就是选择一个基准,然后利用头尾指针寻找比基准大,比基准小的数据,进行交换,直到头指针和尾指针相遇,将基准放到指针位置。如果基准最后的位置左右还有数据,依

2020-08-18 13:25:46 300

原创 关于调节AVL树的平衡(左右旋)

关于调节AVL树的平衡(左右旋)AVL树:具有以下性质的二叉搜索树:左右孩子也都是AVL树,并且左右子树高度差的绝对值不超过1(平衡因子为-1,0,1中的一个)。平衡因子:该节点右子树和左子树的高度差,这个数字即是这个结点的平衡因子。也就是说:AVL树是在BST树的基础上增加了平衡因子的概念,变成了平衡二叉搜索树。关于结点类型和树的设计:typedef int KeyType;typedef struct AVLNode{ AVLNode*left; AVLNode*right; AVL

2020-08-12 15:33:51 392

原创 C++设计模式:单例模式(懒汉模式,痴汉模式,双重锁机制模式)

C++设计模式:单例模式(懒汉模式,痴汉模式,双重锁机制模式)所谓单例模式就是这个类只生成一个对象,那么如何做到让他只生成一个对象呢?将构造放在private访问限定符下;在public访问限定符下提供一个结构调用构造;通过访问标记是否为空而判断是创建对象还是返回对象懒汉模式: 延时加载,需要的时候再加载(下面的普通单例模式和双重锁机制都是懒汉模式)痴汉模式: 贪婪加载,对象提前加载话不多说,上才艺!!!普通单例模式class SingleTon{public: stat

2020-08-10 15:06:55 530

原创 C++设计模式:工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)

设计模式:工厂模式工厂模式:是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式分为三种:简单工厂模式工厂方法模式抽象工厂模式简单工厂模式:一个工厂,通过switch语句来提供不同类型的对象的创建。试用于规模固定,不容易发生产品变动。缺点:不满足开放-封闭原则,当出现新产品的时候,需要在switch里加case语句开放-封闭原则开放原则:新版本设计时可以使用旧版本的代码封

2020-08-10 11:40:16 183 2

原创 C++设计模式:观察者模式(监听者模式)

C++设计模式:观察者模式(监听者模式)所谓观察者监听者模式就是:当观察者观察到事件到来之后,通知对该事件感兴趣的监听者进行相应的操作需要解决的问题:观察者需要做的事情?①事件到来的时候,通知感兴趣的监听者②事件到来之前,先把监听者和事件的关系进行注册如何通知对该事件感兴趣的监听者?调用该监听者的接口(函数)。如何处理监听者和事件之间的关系?可能存在一个监听者对多个事件感兴趣,所以这里我们用C++中STL的map映射容器(一对多)。key存放事件名称,value存放一个vector容器

2020-08-09 15:03:47 2735

原创 关于数据库(MySQL)存储引擎,索引,事务,锁的概念总结

关于数据库(MySQL)存储引擎,索引,事务,锁的概念总结存储引擎查看当前版本数据库支持的存储引擎:show engines;此处主要概述MyISAM,InnoDB,MEMORY,ARCHIVE四个存储引擎。MyISAM1>不支持外键(可以设置,但不生效)2>支持全文索引3>不支持事务(但有类似事务的伪事务)4>支持B+树的索引5>支持表锁6>数据存放在磁盘中InnoDB1>支持外键2>不支持全文索引3>支持事务4&gt

2020-07-27 17:10:23 193

原创 关于const修饰指针的几种情况

const和(星号)结合一般分为以下四种情况*const int *a = &b; //情况1int const *a = &b; //情况2int *const a = &b; //情况3const int* const a =&b; //情况4情况一和情况二: const位于星号的左侧const就是用来修饰指针所指向的变量,即指针指向为常量(与const放在变量声明符中的位置无关,所以情况一和情况二视为同种)int b =500;const int *a

2020-06-13 18:07:53 354

原创 二维数组中的查找

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入一个二维数组和一个整数,判断数组中是否含有这个数字首先实现一个二维数组转一维数组的表达方式,因为二维数组本身就是又一维数组延伸而来的,即将一个一维数组等份分割即可构成一个二维数组。假设二维数组arr的 行数为:rows 列数为:columns那么用一维数组brr表示arr...

2020-02-26 01:06:34 116

原创 查找数组中重复的数字

查找数组中重复的数字情况1:在一个长度为n的数组里的所有数字都在0~1的范围内。数组中某些数字是重复的,但不知道是哪几个数字重复了,也不知道数字重复了几次,找出任意一个重复的数字。例如:长度为7的数组{2,3,1,0,2,5,3},应该输出2或者3。方法一:先将数组进行排序,然后从到尾扫描就好。缺点:需要O(nlogn)的时间。方法二:利用哈希表,从头到尾扫描数组,每扫到一个数字查看哈...

2020-02-23 21:11:59 2366

原创 判断链表是否有环并找到进入环的那个结点

判断链表是否有环并找到进入环的那个结点单链表的三种情况:1,尾结点接到头结点上 (循环链表)2,尾结点接到链表中间(数字6形状)3,无环,存在结点指向null思想:定义两个指针,fast指针跑的速度是slow的二倍1,如果两指针相遇,那么就有环(有环的话,他们两都会一直在环里跑,而fast的速度是slow的两倍,所以会相遇)2,如果fast指针不跑了,说明遇到了null,即表示没有环...

2019-07-03 15:43:21 248

原创 判断两个单链表是否相交

判断两个单链表是否相交单链表也就是每一个结点包括一个数据域和一个指针域,那么如果两个单链表相交,即两个链表呈现Y形状那么怎么怎来实现这个算法呢typedef int ElemType;typedef struct _Node{ ElemType data; struct _Node *next;}LNode, *LinkList;想到第一个方法,那就是定义两个指针,内嵌循环...

2019-07-03 10:00:41 453

原创 将字符串中的特定元素移动至字符串尾部

###将字符串中的特定元素移动至字符串尾部###首先得到一个字符串,第一步想法一定是将字符串从头遍历,#include <stdio.h>#include<assert.h>void Delete(char *str,char pos){assert(str!=NULL); int count=0; ...

2019-06-27 11:14:10 1684

原创 折半查找法

折半查找法:即在一个有序数列中,拿着需要查找的数字,与数列中间项进行比较,如果大于中间项,那么把中间项变为最小项接着进行对比,以此类推。(如果小于,是一样的方法)具体操作如下:void zbcz(int n){ int a[15] = { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 }; int min=1; int max=1...

2019-03-31 12:16:31 384

原创 求π的近似值

π/4=1-1/3+1/5-1/7+…根据这个表达式,我们可以从数学角度来思考,这里的每一项可以构成一个数列。也就是一分之一+负的三分之一+五分之一+负的七分之一不难发现每一项的分母是2n-1,然后偶数项为负,奇数项为正具体操作如下: double j = 0; for (double n = 1; (2 * n) - 1 <= pow(10 * 1.0, 6); n++) {...

2019-03-31 12:07:09 4638

原创 丢弃个位得到个位,丢弃最高位得到最高位

给出一个数字(1)求出它是几位数(2)分别输出每一位数字(3)按逆序输出各位数字(1)方法:求一个数是几位数,每次给它除以10,然后丢弃余数,直到为0结束。如123÷10=12(丢弃余数)具体操作过程如下:...

2019-03-31 11:53:24 242

空空如也

空空如也

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

TA关注的人

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