自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 资源 (2)
  • 收藏
  • 关注

原创 二叉树相关(下)

堆树堆是一种特殊类型的二叉树,具有以下两个性质:每个节点的值大于(或小于)等于其每个子节点的值。该树完全平衡,最后一层的叶子都处于最左侧位置。违反以上两个性质之一的树都是非堆树。当父节点的值总是大于或小于其子节点的时候,则称为最大堆和最小堆。图示最大堆:可以用数组来实现堆,根据最大堆的性质:heap[i] ≥ heap[2i+1]heap[i] ≥ heap[2i+2] ,注意2i+2不能超过项数。根据堆树的性质,其是一个完全二叉树,所以i可以视为父节点,而2i+1和2i+2视为其左

2024-05-31 04:54:57 1558

原创 二叉树相关(上)

树,二叉树和二叉查找树之前介绍过链表,栈与队列。这些数据结构都是线性且一维的。我们为了打破这种限制,创建一个新的数据结构-树。程序世界中的树与自然界中的树是倒过来的:根在顶,叶子在底。根节点只有子节点,没有父节点;而叶子节点没有子节点,或者子节点是空结构。树的递归定义:空结构是一棵空树;如果t1,t2…tk是不相交的树,则以它们的根作为子节点的数据结构也是一棵树;只有通过(1)(2)产生的数据结构才是树。之前我们曾经探讨过查找算法及其相应的复杂度。就算是一维的链表,也有自组织链表以及跳跃链表

2020-06-22 00:03:03 251

原创 递归算法-八皇后问题

递归首先通过一个直观的例子来展示递归的用法:int factorial(int n){ int result = n; if(n > 0) return result * factorial(n-1); if(n == 0) return 1; else { cout << "error" << endl; return 0; }}以上是常用求n!n!n!的代码。注意递归只是被调用的函数名刚好同调用者相同,因此递归调用并不是表面上的调用自

2020-05-25 23:27:21 367

原创 栈与队列

前言注意区别,这里的栈与内存管理中的栈不是同一个概念,关于堆栈的概念请参考其他资料,本文介绍数据结构层面上的栈。栈栈是一种线性数据结构,存储以及查找数据时只能访问栈的一端(这是与另外一种线性结构数组的明显区别之一),栈类似于餐厅中的一叠盘子,最后放在顶端,却可以最先被取出,因此栈被称为LIFO(last in/first out)。栈是有空间限制的,有盘子的时候才能取出盘子,放满了以后就不能...

2020-03-21 16:05:10 161

原创 链表-数据结构与算法的第一课

前言在学习了C++基础以及算法复杂度分析方法(NP完整性笔者也没有理清,待到吃透再更)后,我们开始学习第一种数据结构——链表。在学习链表之前,相信熟练使用C语言的各位已经掌握了数组这一数据结构 。其有两个局限:编译前就需要知道大小。数组中的每个元素占据的内存单元数是相同的。链表就不存在这些问题,所以它可以分散存储于内存的任何位置,对于双向链表,每一个节点都存有两个地址,分别存放上一个节点...

2020-02-16 17:06:38 310

原创 算法基础-复杂度分析

计算复杂度以及渐近复杂度常见的衡量效率的标准:时间和空间。在面试及日常应用中往往更加注重时间复杂度。这并不代表时间复杂度底的算法执行时间就越短,还会受计算机硬件影响以及编程语言限制。例如编译程序就比解释程序快得多,比如C语言和BASIC语言。我们通常使用n表示处理对象的规模,所需的时间为t,那么:如果t=cnt=cnt=cn,则n与t成线性关系。当t=log2nt = log_ 2 nt=...

2020-02-01 02:07:16 810

原创 C++文件操作

文件大多数计算机都使用文件,文件的本质是存储在某种介质上的一系列字节。C++处理文件I/O的方法与标准输入输出类似,但更加复杂,例如读写模式,文件与流的关联,以及文件交替移动等。文件I/O类fstream描述了文件管理的行为,包含ifstream类和ofstream类,还定义了一个fstream类用以同步文件I/O。上述类都是从iostream中的类派生过来。所以这些新类可以使用标准输入输出...

2020-01-26 02:54:20 351

原创 C++输入输出流

在学习算法与数据结构之前,希望大家打好这一方面的基础,标准类库对于之后的学习尤其重要。流和缓冲区为了防止歧义,这里将操作系统下运行的程序统称为文件,对于C++而言,只需要关心输入输出的字节流,而不必关心字节来自何处。为了更高效地处理这样地字节流,例如从硬盘提取字节,单次提取一个字节,重复提取费时费力,通常一次提出512个字节(可能更多),而输入C++程序则通过字节流的方式。那么,每次存放这51...

2020-01-20 23:47:31 359

原创 函数对象

STL标准模板库中有容器,迭代器,算法以及函数对象等概念,本文简要介绍函数对象。在C++中可以将()当作普通的函数调用运算符,也可以对其进行重载,STL中大量运用了函数对象的特性。此处介绍一个当中重载()定义函数对象的例子。关于()重载的具体细节请参考C++基础中的运算符重载章节。直接上代码:#include <iostream>#include <functional&...

2020-01-12 02:56:16 134

原创 C++模板

模板C++ 模板模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。前面提到过,多态体现了泛型编程的思想,其语法基础是虚函数和虚继承,那么模板同样是泛型编程必不可少的工具。函数模板通过函数重载的方式,可以简单实现同名函数针对不同参数及数据类型进行处理并且不产生冲突,缺点是编写的代码量偏大,函数模板可以很好地解决这个问题。template<typename T&g...

2020-01-05 12:19:10 182

原创 C++类型转换

旧式类型转换C/C++通用类型转换:(int)0.1;char a;(float) a;(type)value,(type)expression为旧式类型转换的基本形式。新型类型转换注意,一下介绍的都是运算符,非函数api。static_cast< type > ( epression )class father{};class son{};int mai...

2020-01-04 03:57:46 88

原创 C++异常

异常关于异常异常处理机制是面向对象语言特有的,用以处理代码运行中遇到的特殊情形。除了标准库以外,甚至可以自己声明额外的异常情形。注意这里的异常并不等于程序崩溃或内存泄漏等错误,取决于程序所面临的具体情况,有时候并不是一个贬义词。异常实现机制先来个简单粗暴的abort(),其功能可以查询cplusplus.com,截图如下:简单来说,就是通过API判定进程出现错误,传递相应异常信号,如果...

2020-01-03 19:24:52 148

原创 C++类的继承

继承初识继承继承的作用是提高程序的复用性,定义一个基础类,其余类可以继承基础类的成员属性。相信子类继承父类的说法大家已经熟悉了。举一个形象的例子:class people{public: string 姓名; int 年龄; void 共同行为() { 吃饭睡觉; }}; //基类,基础类,父类class kid : public people{public: ...

2020-01-03 04:04:27 133

原创 运算符重载

运算符重载重载形式运算符重载可以为标准得C/C++运算符进行重定义,本节请好好掌握,STL等高级用法中关于运算符重载的运用非常常见。以用的比较多的"+"运算符为例,话不过说,先上代码。#include <iostream>using namespace std;class Example{public: int A; float B; Exam...

2019-12-31 04:45:05 181 1

原创 内联函数

内联函数基本形式内联函数可以理解为嵌入,用内联函数的代码直接替换掉父函数中的相关代码,可以类比宏定义。区别于常规函数需要跳转执行,内联函数执行效率更高。相应的缺陷就是如果该内联函数多次调用,则对代码区空间是一个很大的浪费。话不多说,内联函数理解起来并不费劲,直接上代码:inline int fun(int c){}int main(){ int a = 0; fun(a); r...

2019-12-23 02:02:53 191

原创 拷贝构造

构造函数的基本形式拷贝构造函数的本质也是一个构造函数,一个对象给另一个对象进行初始化的时候,就会调用拷贝构造。话不多说,先上代码:#include <iostream>using namespace std;class Example{public: static int i; Example() { cout <<...

2019-12-23 01:00:36 118

原创 const和static成员

常函数话不多说先上代码:#include <iostream>using namespace std;class Example{public: int a; Example()//声明常对象必须写构造函数 { ; } void show() const //构造与析构不能是常函数 { /...

2019-12-22 02:07:53 129

原创 构造函数与析构函数

构造函数构造函数的形式构造函数常用于对类成员进行初始化操作,其在对象被创建的时刻运行。构造函数的写法通常是 类名(characters…) 代码如下:class Example{public: int age; void fun() { age = 0; //成员函数对成员进行初始化 cout << "member fu...

2019-12-22 00:03:42 121

原创 C++类的基础

类的基本形式C++的类是其面向对象编程思想的基石,类比C语言中的结构体,C++的类是一个对象相关属性的合集,比如一个对象是学生,那么他的身高,性别,性格,行为(函数)都可以作为他的属性。class Student{public://类外可见 string name; int height; string character; void behaviour() { }};//不...

2019-12-21 19:56:39 128

原创 C++函数特性

本文介绍C++相对C语言以外的缺省,重载以及防重复包含机制。 函数缺省:所谓缺省参数,顾名思义,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即带缺省值的参数必须放在参数表的最后面。 eg: void fun(...

2019-12-19 15:06:36 182

原创 C++引用

类比C语言中的typedef为类型起别名的方式,C++中的引用&为变量起别名。(注意不是取地址符号)。 首先复习一下C语言中的*用法: 1.声明,表示指针变量,eg: int *p = null; 2.*+地址,表示地址操作符, eg: *p = x; p = &a; 3.数字*数字,表示乘法; 下面介绍引用:int a = 0;int &b = ...

2019-12-19 13:09:45 113

原创 C++内存申请与释放

C语言中申请内存malloc,释放内存free。 C++中申请内存new,释放内存delete。#include <iostream>#include <cstring> //注意头文件名称using namespace std;int main(){ int *p1 = new int; *p1 = 1;//赋值 delete ...

2019-12-19 00:57:25 785

原创 C++结构体与C语言的区别

由于C++面向对象的特性,结构体声明与定义相比C语言简化许多。#include <iostream>using namespace std;struct a{ int a; void fun() { cout << "fun" << endl; }};int main(){ a st...

2019-12-19 00:09:58 209

原创 命名空间

命名空间是C++对同名函数与成员提供的解决方案,众所周知,C语言中无法定义同名的变量,函数。C++命名空间可以合理地规避这个问题。#include <iostream>using namespace std;namespace stu1{ void sort() { cout << "stu1" << endl; ...

2019-12-18 23:13:39 117

原创 标准输入输出函数

这是C++的第一段程序,主要呈现主函数的形式,输入输出流的基本用法。代码编译器可以根据自己喜好选择VS,笔者使用的是QT。#include <iostream> //加入头文件的方法using namespace std; //打开(标准)命名空间int main(void) //尽可能使用标准形式{ cout << "Hello World!" &...

2019-12-18 22:51:59 183

串口网络调试工具包

该资源包用于串口、网口的调试,可以方便嵌入式开发者快速测试开发环境。

2018-04-04

空空如也

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

TA关注的人

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