自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二叉树的遍历

关于树的题目首先要熟练掌握的就是这三种递归遍历方式,三种遍历方式(前序遍历、中序遍历和后序遍历)掌握后就有个大致的结题框架。中序遍历二叉树的前序遍历遵循的是左 --> 根 --> 右的遍历顺序,其中遍历到根节点时,一般都是需要加上你需要的操作,以二叉树的中序遍历(leetcode 94)为例。 vector<int> vec; vector<int> inorderTraversal(TreeNode* root) { if (!roo

2021-09-22 23:27:38 81

原创 Leetcode链表专项

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-09-20 18:57:36 89

原创 printf格式化输出的一个小问题

C语言中printf可以格式化输出各种类型的参数,但是这里是要记录自己忽略的一个问题。在项目我想输出打印字符串,但是打印的字符串为空,但是我能确保字符串并不是空的,因为我将字符串逐个能打印出来。开始以为是没有进行拷贝。于是,拷贝到另一个变量之后,打印出来的字符串还是空的。紧接着,我从字符串的第二位开始输出,发现能够打印到控制台中。仔细看我的字符串的第一个字符的十六进制为0x00,所以猜测在打印字符...

2020-01-05 23:30:51 282

原创 Linux安装Git或更新Git

1、Linux下安装Git,直接在命令行输入: sudo apt-get install git如果安装成功后,可以通过git --version查看到已安装的Git的版本号。但是有可能安装的Git不是最新版的。笔者在安装后查看的Git就不是最新的,所以想更新下Git。大部分的博客都是通过卸载已安装的Git,然后通过编译最新的源码,再进行安装。这种方法可行,但是会比较麻烦,说不定...

2019-11-16 19:58:54 510 1

原创 C++基础 虚函数

在基类中可能会存在virtual函数,那么当派生类继承了基类的话,一般都是希望派生类重新定义继承来的virtual函数。如果派生类没有定义某个虚函数,则使用基类定义的版本。C++中的函数调用默认不使用动态绑定。要触发动态绑定需要满足两个条件:(1)只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数时,不进行动态绑定。(2)必须通过基类类型的引用或指针进行函数调用。class fru...

2018-03-27 19:31:22 135

原创 《Effective C++》条款07:为多态基类声明virtual析构函数

   class Base_A{public: Base_A():element(0) {} ~Base_A() { cout &lt;&lt; "调用A的析构函数" &lt;&lt; endl; } void print(int a) { cout &lt;&lt; a &lt;&lt; endl; } void print(float a) { cout &lt;&lt; a &..

2018-03-26 11:41:51 195

原创 《Effective C++》 条款33:避免遮掩继承而来的名称

    派生类继承基类后会拥有基类的成员变量和成员函数,如果派生类中有和基类相同名称的成员函数和成员变量,那么派生类中相同名称的成员函数会把继承而来的成员函数“遮盖”掉。下面给出实例来进行分析。class Base_A{public: Base_A():element(0) {} virtual ~Base_A() {} void print(int a) { cout &lt;&lt;...

2018-03-25 10:37:03 210

原创 C++基础——虚继承及其内存分布

 1、虚继承在C++继承中会遇到一种特殊的情况——“钻石继承”。“钻石继承”指的是当一个基类A被两个派生类B和C同时继承,此时另一个派生类D又同时继承B和C,如果此时用图表示出来就像一个菱形一样,如下图。    派生类D通过继承之后拥有基类A和派生类B,C的成员,所以一旦派生类D想要调用基类A的成员(无论是数据成员还是成员函数)时,此时派生类是通过派生类B来访问基类A的成员呢?还是通过派生类C来访...

2018-03-23 16:12:57 1515

原创 C++基础——继承

1、公有、私有和受保护继承    如果一个类的成员被定义成该类的私有成员,那么只有基类的成员和友元可以访问类中的私有成员。同时派生类也无法访问基类的私有成员,派生类的实例对象也无法访问这些私有成员。如果派生类为公有继承,基类成员保持自己的访问级别:基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员。如果是受保护成员,基类的public和p...

2018-03-19 08:53:03 132

原创 C++基础——友元函数

    在C++中为了有更好的封装性,所以我们一般将数据声明为私有成员(private)。当我们需要操作数据成员的时候就需要利用类内的函数来使用私有的数据成员。而我们在实现函数定义时是在类外进行函数定义的。而只有类内的函数才可以访问类中的数据成员,函数通常声明为共有成员。但是还有另一种方法:将函数声明为友元函数,那么该函数也可以访问类内的私有成员。    class product{publi...

2018-03-17 16:11:40 288

原创 MySQL之增、删、查、改

DDL语句(数据库和数据库对象的创建、修改和删除基本都是通过DDL语句来实现的)1.1 create 数据库create database +数据库名字[库选项];e.g:create database SchoolDB;库选项:用来约束数据库 (1)字符集设定:charset/character set 具体字符集(数据存储的编码格式):常用字符集:GBK和UTF8 (2)校对集设定:col...

2018-03-15 21:23:50 579

原创 《Effective STL》 05 区间成员函数优先于与之对应的单元素成员函数

讨论:给定v1和v2两个矢量(vector),使v1的内容和v2的后半部分相同的最简单操作如何实现?    方案1:v1.assign(v2.begin()+v2.size()/2,v2.end());    方案2:v1.clear();   copy(v2.begin()+v2.size()/2,v1.end(),back_inserter(v1));    方案3:使用循环将所需要插入的元素...

2018-03-14 16:38:55 178

原创 《Effective STL》 03 确保容器中的对象拷贝正确而高效

    当你通过insert或者push_back之类的操作将对象加入到容器中,事实上存进容器中的是你所指定的对象的拷贝。当通过front等操作后,取出来的对象也是所制定的对象的拷贝而已。存放进容器的对象越多耗费的时间就越多。同时还存在“剥离”的情况存在,例如:当创建一个存放基类对象的容器,却向容器中存放派生类的对象,那么在派生类对象被拷贝进容器中,那么特有的派生类的信息就会丢失掉。之所以会发生“...

2018-03-14 00:28:54 208

原创 《Effective STL》 01:慎重选择容器类型

    vector是默认应使用的序列类型;当需要频繁地在序列中做插入和删除操作时,应该使用list;当大多数插入和删除操作发生在序列的头部和尾部时,deque是应考虑的数据结构。在STL的容器里面可以大致分为两类:连续内存容器和基于结点的容器。连续内存容器是指容器内存放的元素是在一块或多块内存中,每块内存存有多个元素。而基于结点的容器是像链表一样的容器,每一个小的内存中只存放一个元素。在进行删除...

2018-03-13 23:30:31 161

原创 算法——冒泡排序算法

    1、冒泡排序的思想    冒泡排序的思想很简单,就是相邻的两个元素进行比较,如果下标较小的元素大于下标较大的元素,交换两个元素的位置。直到最后没有反序位置。所以自然而然会想到可以使用for循环来遍历整个数组的元素来进行比较(相邻的两个元素比较)。那么代码就可以这么写:for(int i=0;i&lt;ListSize-1;i++){ if(List[i]&gt;Lis...

2018-03-13 00:20:04 116

原创 进程与线程之生产者和消费者问题

    在学习进程和线程的过程中,毫无疑问肯定会学到多线程、进程间通信等相关问题。而这也是学习进程和多线程方面的一个重点。这篇文章主要介绍的是利用互斥量、锁以及使用Pthread库来实现生产者和消费者问题。1、临界区    临界区指的是共享内存进行访问的程序片段。在实现线程间同步就必须只有一个线程访问临界区。上图中进程A在T1时刻进入临界区,当运行到T2时刻的时候进程B试图进入临界区。因为此时进程...

2018-03-09 16:40:39 1904

原创 Leetcode 20. Valid Parentheses

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.The brackets must close in the correct order, "()" and "()[]{}" are all valid but ...

2018-03-08 20:50:31 103

原创 C++类中的static成员函数和static数据成员

1、static数据成员的使用1.1 static数据成员的定义static数据成员可以声明为任意类型,可以是常量、引用、数组、类类型。static数据成员在类内声明,但是必须在类定义体的外部定义,也就是必须在类外进行定义。在使用类内的static成员时,和其他的成员变量的使用方法相同。class ChineseClass{public: void Note(); ChineseClass...

2018-03-08 17:55:44 2075

原创 《现代操作系统》 进程与线程(2)

第二章  进程与线程2.2  线程    多线程的优点主要是以下三个:1)多线程具有并行实体共享用一个地址空间和所有可用数据的能力。2)线程比进程更轻量级,所以它们比进程更容易创建,也更容易撤销。3)当涉及大量的计算和I/O处理时,拥有多个线程允许这些活动可以同时进行。在网络服务器中多线程发挥着重要的作用。Web服务器中会有一个分派程序的多线程从网络中不停地读入工作请求,然后把工作请求派给工作线程...

2018-03-06 23:15:17 172

原创 《现代操作系统》之 进程与线程

第二章  进程与线程2.1进程    操作系统中最核心的概念是进程,它是对正在运行程序的一个抽象,包括操作系统。一个进程就是一个正在执行程序的实例,包括程序计数器、寄存器和变量的当前值。下图中有四个进程,但是只有一个物理程序计数器。在执行其中某个程序时,例如执行A进程,此时进程A的逻辑程序计数器就会被加载到物理程序计数器中。并且在实际的执行当中,只有一个程序在执行。虽然现在多核的CUP盛行,但是即...

2018-03-05 23:43:56 257

原创 《CEffective C++》之条款01

    经过40多年的发展C++已经是个多重范型编程语言,一个同时支持过程式、面向对象形式、函数形式、泛型形式、元编程形式的语言。C++在不断的发展,所以在学习的过程中需要用新的思想和角度来看待C++。而“最简单的方法是将C++视为一个由相关语言组成的联邦而非单一的语言”,当时第一眼看到这句话的时候无法理解为什么要把C++给拆开。当然这种“语言联邦”的形式表面上看像是分割开的,但是实际上其中是有联...

2018-03-04 23:52:29 136

原创 二叉树的遍历

1、前序遍历上一篇文章讲到二叉树的存储结构,这里使用的就是该存储结构。前序遍历的规则是:若二叉树为空,则空操作返回,否则就先访问根节点,然后前序遍历左子树,再前序遍历右子树。那么前序遍历的结果是:ABDGHCEIF。前序遍历的代码分析:下面的代码使用递归算法进行前序遍历的。先访问根结点,若根结点不为空,则打印结点的数据。然后递归访问左子树,直到所访问的左子树是最后一个。最后以此类推访问右子树。vo...

2018-02-25 15:48:29 145

原创 二叉树

1、二叉树的特点每个结点最多两棵子树,所以二叉树中不存在大于2的结点。注意不是只有两棵子树,而是最多有。左子树和右子树是有顺序的,次序不能任意颠倒。即使树中某种结点只有一棵子树,也要区分它是左子树和右子树,如下图。                                     2、二叉树具有的五种基本形态空二叉树。只有一个根结点。根结点只有左子树。根结点只有右子树。根结点既有左子树又有右...

2018-02-23 22:16:19 169

原创 链栈

链栈和顺序栈不同,链栈是采用一个个存储结点来存储数据的。它不像顺序栈在地址上是连续的线性存储结构。所有的存储单元可以占用连续或不连续的存储区域。每个存储单元在存储栈中的元素a1的同时,也存储其逻辑后继a2的存储地址。typedef struct node{ int data;//存放数据 struct node *next;//下一个结点的地址}LinkNode,*LinkStackPtr

2018-02-03 21:25:43 203

原创 顺序栈

数据结构——栈,是一种先入后出的数据结构。就像一摞盘子一样,一个一个地往上摆。取盘子的时候是在最上面的盘子先被取出来,所以先放进去的就要后取出来。栈的特性具有下面两种特性:(1)组成的数据元素是相同类型的,并且数据间线性排列。(2)只能对栈顶的数据元素进行操作。栈结构,可以分为两种——分别是顺序栈和链栈。顺序栈存放数据使用的是数组的形式。这里要介绍的顺序栈。顺序栈采用的是地址连续的

2018-02-03 14:25:28 183

原创 指针参数传递中的玄机

之前在写数据结构(链栈)的算法实现的时候出现了一个小问题,我想要实现元素入栈的功能,函数的原型及定义如下:LinkStack* PushElem(LinkStack *linkstack,int element){ if (IsEmptyStack(linkstack)) { cout<<"该栈为空,无法插入元素"<<endl; return linkstack; } el

2018-02-03 10:39:57 116

原创 链队列的应用——打印杨辉三角

链队列的一个小应用可以用来打印杨辉三角。虽然打印杨辉三角的方法有很多,也不需要使用到数据结构,但是这里可以用数据结构来实现从而达到复习的目的。下面我主要说一下这个小算法。还是应用结构体来封装数据,和下一个节点的指针。每个存储节点:typedef struct node{ int data; struct node *next;}Node;包含头指针和尾指针的链队列:

2018-01-20 12:25:04 5467

原创 数据结构——链队列

 链队列是指采用链接存储结构实现的队列。队列中的每个元素单独占有相应大小的存储空间。每个存储单元包括所需要存储的数据,以及下个存储单元的地址指针。可以用下面图一的示意图来表示一个存储单元。datanext图一  存储单元结构示意图链队列是在对头删除数据元素、队尾插入数据元素的。所以可以分别为队头和队尾设置一个头指针和一个尾指针,头指针和尾指向该链队列的队头和队尾。我们可以用结构体来封装。链队列的基...

2018-01-19 21:10:11 1395

原创 Windows程序设计 读书笔记(3)

第三章 窗口与消息

2017-12-05 21:08:35 159

原创 Windows程序设计 读书笔记(2)

第二章 2.2.1 char数据类型 声明和初始化一个包含单一字符变量: char c = ‘A’ 变量c需要一个字节的存储空间而且会用十六进制0x41来初始化。 定义一个指向字符串的指针: char *p; 该指针需要用4个字节的空间。初始化为p=“Hello!”之后仍然需要4个字节的存储空间。字符串存储在静态内存中并使用7个字节的存储孔家。(其中包括6个字节存储字符串和一个字节存储

2017-12-02 14:24:48 143

原创 Windows程序设计 读书笔记(1)

第一章 每个Windows的exe文件包含它所要用的各个动态链接库以及库中的函数的引用地址(reference)。当一个Windows程序被装进内存中,程序中的函数调度被解析成DLL函数的入口指针,同事这些调用函数也被装进内存。int WINAPI WinMain(HINSTANCE hInstance,

2017-12-02 13:44:59 205

原创 二维动态数组的创建

昨天在写一个小的编程作业的时候需要用到动态的二维数组。我需要用到这个二维的数组来实现矩阵的加、减、乘,这个作业很简单,但是创建动态二维数组的这个知识点给忘了(尴尬)。所以就查了下资料,把这个简单的知识点记录下来。假如要创建一个4*5的动态二维数组。int **Metrix;Metrix=new int *[4];//Metrix实际上是指针的指针,所以这一行代码

2017-11-22 20:48:43 1126

原创 intToRoman算法题

做这道题之前得自己先写写阿拉伯数字与罗马数字之间的转换,找到他们之间的规律。刚开始的时候,我用了一个很笨的办法来完成这道算法题。我想把一个罗马数字和阿拉伯数字对应的表给写出来。先把1~10的写出来,然后把10,20,30,40,50,60,70,80,90的罗马数字写出来,再把100,200,300,400,500,600,700,800,900对应的罗马数字写出来。把所给的数字分解成一位一位的数字

2017-11-02 23:48:54 140

原创 简单程控keithly2400万用表(MFC)

在做测试的过程中,无可避免要使用仪器,有些时候需要速度较快的读数,此时就需要程控这些仪器来实现了。刚开始没有接触的时候觉得这个东西太难了,经过这次的试验之后发现其实程控仪器是有规律可寻的。并不是想象中的那么难。程控仪器主要使用的是SCPI标准语法。可编程仪器标准命令(英语:Standard Commands for Programmable Instruments,缩写:SCPI)定义了一套用于控制

2017-10-31 23:31:27 4289 2

原创 Reverse Integer算法题

long reverse(long x) { long reservation=0; while(x!=0) { reservation=reservation*10+x%10; x=x/10; } if(reservation<2147483648&&reservati

2017-10-30 22:27:53 129

原创 ubantu17.04与VirtualBox简要的安装教程

因为有个小程序需要在Linux系统环境下开发,所以作为一个之前没有接触过虚拟机的小白在安装的过程中还是遇到了几个小问题。ubantu有个中文的官网,下载可以到这个网址下载http://cn.ubuntu.com/download/。我下载的是ubantu17.04版本的。同时我使用的是Oracle的VirtualBox-5.0.24。首先安装好VirtualBox,最好安装的地址中不要包含中文。这是

2017-10-29 11:28:31 1043

原创 C++函数传参问题

函数与参数 1.传值 int sum(int a,int b){ return a+b;}int main(){ sum(2,3); return 0;}上述程序中a,b称为形式参数。在调用此函数时,“传值形式参数相对应的实际参数的值将在该函数执行之前被复制给形式参数,复制过程是由该形式参数所属的数据类型的复制构造函数完成的。”这是在《数据结构、算法与应用——C+

2017-10-20 10:41:02 563

原创 HappyNumber leetcode算法题

HappyNumber leetcode算法题HappyNumber一个快乐的数字是由以下过程定义的数字:从任何正整数开始,将数字替换为数字的平方和,并重复该过程,直到数字等于1(将保留在哪里),或者循环一个不包括在内的循环的循环中,这个过程以1结尾的数字是快乐的数字。示例: 19是一个快乐的数字 1^2 + 9^2 = 82 8^2 + 2^2 = 68 6^2 + 8^2 = 100

2017-10-19 12:33:23 331

原创 Leetcode 每日一道

Matlab中的reshape函数是将给定的矩阵转换成用户要求的形式。例如把1*4的矩阵可以转换成2*2的矩阵,其中元素不变,矩阵的形式发生改变。

2017-10-12 15:18:07 185

原创 C++基础学习

对C++中后自增操作符和前自增操作符的辨析。

2017-10-10 10:11:03 429

空空如也

空空如也

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

TA关注的人

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