自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ROS(一)整体框架

2022-04-09 13:16:07 155

原创 网络基础(一)

文章目录前言一、计算机网络背景1.1 网络发展二、网络协议初识2.1 TCP/IP五层(或四层)模型三,网络传输基本流程3.1 网络传输流程图3.2 数据包封装和分用3.3 网络中的地址管理总结前言本节重点:了解网络发展背景, 对局域网/广域网的概念有基本认识了解网络协议的意义, 重点理解TCP/IP五层结构模型学习网络传输的基本流程, 理解封装和分用一、计算机网络背景1.1 网络发展独立模式:计算机之间相互独立[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(

2021-08-25 11:30:09 215 1

原创 linux多线程

文章目录前言一,线程1.1 什么是线程1.2 线程的优点1.3 线程的缺点1.4 线程异常1.5 线程用途二,进程与线程对比三,Linux线程控制3.1 POSIX线程库3.2 进程ID和线程ID3.3 线程终止3.4 线程等待3.5 分离线程四,linux线程互斥4.1 互斥量的接口4.1.1 初始化互斥量4.1.2 销毁互斥量4.2 可重入与线程安全4.3 **常见的线程安全的情况**4.4 **常见不可重入的情况**4.5 常见可重入的情况4.6 **可重入与线程安全联系**4.7 可重入与线程安全.

2021-08-22 20:44:30 292 5

原创 Linux:进程间通信与信号

文章目录一,为什么要有共享内存?二,管道2.1 匿名管道2.1.1 管道符号2.1.2 管道的本质2.1.3 管道的接口2.1.4 管道特性2.1.5 匿名管道的非阻塞特性2.1.6管道创建流程2.2 命名管道三,共享内存3.1 共享内存的原理3.2 共享内存接口3.3 共享内存的特性:总结一,为什么要有共享内存?每一个进程都想要访问物理内存,都是通过访问进程虚拟地址空间当中的虚拟地址来访问,访问的时候,通过各自的页表结构。造成了每一个进程和每一个进程的数据独立,虽然有进程独立性的存在,进程运行的时.

2021-08-11 18:36:47 284 3

原创 Linux:基础IO

文章目录前言一,复习C语言当中学习的文件接口操作二,文件描述符三,静态库和动态库总结前言本文将为大家介绍基础IO的相关知识,让我一起来学习吧。一,复习C语言当中学习的文件接口操作FILE *fopen(const char *path,const char *mode); path:待要打开的文件 mode:以何种方式打开 r:可读方式打开 r+:可读可写方式打开 w:可写方式打开 w+:可读可写方式打开,如果文件不存在,则创建文件。如果是打开了一个已经存在的文件,则截断文.

2021-08-11 16:18:36 105

原创 Linux进程控制

文章目录前言一,进程创建1.1 fork函数初识1.2 虚拟地址空间1.3 其他概念二,进程终止2.1 进程退出的场景2.2 进程常见的退出方法2.2.1 exit函数和 _exit函数的原理2.2.2 exit函数和 _exit函数的区别三,进程等待3.1 进程等待的必要性3.2 进程等待的方法四,进程程序替换4.1 替换原理4.2 替换函数4.3 函数解释4.4 命名理解总结前言今天将为大家详细介绍进程控制的相关知识。如exit和_exit函数的区别、fork函数的原理、虚拟地址空间、进程创建、.

2021-08-10 19:11:40 124 1

原创 C++进阶:关联式容器

文章目录前言一,关联式容器1.键值对2. 关联式容器二,树形结构的关联式容器2.1 set2.1.1 set的使用案例2.2 map2.2.1 map的使用案例2.3 multiset2.3.1 multiset的使用2.4 multimap2.4.1 multimap的介绍2.4.2 multimap的使用总结前言今天介绍几种关联式容器,这几种关联式容器在C++中很常用,且很相似,同学们要仔细分辨。一,关联式容器1.键值对键值对是用来表示具有一一对应的关系的一种结构,该结构中一般只包含两个.

2021-07-29 19:37:14 406 2

原创 数据结构进阶:二叉搜索树

文章目录前言一,二叉搜索树的概念1.1 二叉搜索树的性质1.2 二叉搜索树的操作1.3 二叉搜索树的实现1.4 二叉搜索树的性能分析总结前言本节内容介绍二叉树的升级版-----二叉搜索树。本节内容比较少,却是后面内容的重要铺垫。一,二叉搜索树的概念1.1 二叉搜索树的性质二叉搜索树又称为二叉排序树,它是一颗空树或具有以下性质的二叉树。若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。若他的右子树不为空,则右子树上所有节点的值都大于根节点的值。它的左右子树也分别为二叉搜索树。.

2021-07-29 16:12:39 133 1

原创 C++进阶:多态

文章目录前言一,多态的概念1.1 概念二,多态的定义及实现2.1 多态的构成条件2.2 虚函数2.3 虚函数的重写2.4 重载,覆盖(重写),隐藏(重定义)的对比三, 抽象类四,多态的原理4.1 虚函数表4.2 动态绑定与静态绑定五,常见问题总结前言本文章将为大家介绍多态的内容,多态是C++高级语法的核心部分,希望大家重视起来。一,多态的概念1.1 概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。例如:同样是扫码抢红包,不同的用户得到的

2021-07-29 15:17:46 224 6

原创 C++进阶:继承

文章目录前言一、继承的概念和定义1.1继承的概念1.2 继承方式和访问限定符总结二、基类和派生类对象赋值转换三,继承中的作用域四,派生类的默认成员函数五,继承与友元,静态六,菱形继承以及菱形虚拟继承总结前言本篇文章介绍什么是继承,继承是C++语法中的核心部分,无论是实际应用和面试找工作都是重点内容。希望大家重视起来。提示:以下是本篇文章正文内容,下面案例可供参考一、继承的概念和定义1.1继承的概念继承机制是面向程序设计时使代码复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展.

2021-07-20 10:27:22 175 6

原创 Linux入门——进程状态

一,操作系统(Operator System,即OS)1.操作系统的概念任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核(进程管理,内存管理,文件管理,驱动管理)其他程序(例如函数库,shell程序等)2.设计OS的目的与硬件交互,管理所有软硬件资源为用户程序(应用程序)提供一个良好的执行环境3. 定位在计算机体系中,操作系统的定位是:一款只负责 “管理” 的软件4. 如何理解计算机中的管理描述被管理的对象组织被管理的对象

2021-07-01 21:36:49 260 8

原创 C++模板

文章目录前言一、函数模板1.1函数模板的概念1.2 函数模板类型1.3 函数模板的原理1.4 函数模板的实例化1.4.1隐士实例化1.4.2 显式实例化1.5 模板参数的匹配原则二、类模板2.1 类模板的定义格式2.2 类模板的实例化总结前言本节将为大家讲解C++中另一个重要的部分:模板。在这篇文章中,会让大家初步了解什么是模板,模板的基本用法和概念。一、函数模板泛型编程:编写与类型无关的通用代码,可以提高代码复用率。模板是泛型编程的基础。1.1函数模板的概念函数模板代表了一个函数家族,

2021-06-18 11:42:04 293 27

原创 C++内存管理

文章目录前言一、C/C++内存分布二、C语言的动态内存管理三,C++内存管理方式3.1 new/delete操作内置类型3.2 new/delete操作自定义类型3.3 operator new和operator delete函数3.4 new和delete的实现原理3.4.1 内置类型3.4.2 自定义类型3.5 malloc/free和new/delete的区别:3.6 内存泄漏总结前言我们在C语言中已经学习了内存管理,在C++部分内存管理同样是很重要的模块。本文章将为大家进一步介绍C/C++的内

2021-06-17 20:23:07 145 6

原创 类和对象(三)

文章目录前言一、explicit关键字二、static成员三,友元3.1友元函数3.2 友元类四,内部类总结前言本篇文章介绍将C++的另一些关键字、友元函数、内部函数等。一、explicit关键字构造函数不仅可以构造和初始化对象,对于单个参数的构造函数,还具有类型转换的作用。class Date{public: Date(int year) :_year(year) {} explicit Date(int year) .

2021-06-17 16:10:16 82 1

原创 类和对象(二)类的6个默认成员函数

这里写目录标题前言1. 构造函数2.析构函数3. 拷贝构造函数4. 运算符重载4.1赋值运算符5. const成员5.1 const修饰类的成员函数总结前言本篇文章将带大家进一步了解C++的基础知识,本节将介绍一些C++的六个默认成员函数。1. 构造函数构造函数是特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只能调用一次。注:构造函数的作用是初始化对象。特征:1.函数名和类名相同2.无返回值(void也不

2021-06-17 10:11:34 282 2

原创 类和对象(一)

文章目录前言1.内联函数2.宏的优缺点3. auto关键字3.1 auto的使用方法4. 面向对象和面向过程5. 类5.1 类的定义5.1.1 类 class 和结构体 struct 的区别5.2 类的访问限定符和封装5.2.1 访问限定符5.2.2 封装5.3 类的作用域5.4 类的实例化5.5 类对象模型5.5.1 计算类对象的大小5.6 this指针5.6.1 this指针的引出5.6.2 this指针的特性总结前言本篇文章将带大家进一步了解C++的基础知识,本节将介绍一些C++特性并入门类和对

2021-06-10 11:03:37 355 2

原创 C++入门1-基础语法

文章目录前言1.命名空间1.1命名空间的定义1.2 命名空间的使用2. C++输入&输出3.缺省参数3.1缺省参数分类4.函数重载4.1函数重载调用原理5.extern "C"6. 引用6.1 引用的特点6.2 常引用6.4 引用和指针的区别和共同点总结前言从本篇文章开始,我们将进入C++的世界。C++兼容了C语言,而且C++的语法和C语言有许多的相同之处,所以在C++的学习过程中,我不会花大量篇幅来赘述已经在C语言中学过的语言。我会把C++中和C语言不同的语法,关键字以及C++的特性等介绍给大

2021-06-05 17:07:22 143 4

原创 常见排序算法介绍和实现

文章目录前言一、排序的概念及应用1.1 排序的概念1.2 排序算法的稳定性1.3 外部排序和内部排序二,常见的排序算法2.1插入排序2.1.1插入排序基本思想2.1.2 直接插入排序的特性2.1.3 希尔排序2.2 选择排序2.2.1 基本思想:2.2.2直接选择排序2.2.3 堆排序2.3 交换排序2.3.1 冒泡排序2.3.2 快速排序2.3.3 归并排序2.4 非比较排序2.4.1 计数排序总结前言本篇文章将带大家了解另一个数据结构的重要算法:排序。本篇文章将带大家了解一些常见的排序算法,介绍他

2021-06-05 14:37:54 156

原创 二叉树的创建和简单操作;前序、中序、后续,层序遍历。

文章目录前言1.定义二叉树结点2.创建树3.获取结点4.计算二叉树结点和叶子结点个数5.计算树的高度6. 计算第K层结点的个数7. 查找二叉树值为X的结点8.前序,中序,后序遍历9.层序遍历10.总体代码实现总结前言本篇文章将带大家了解二叉树一些功能实现和二叉树的四种遍历方式:前、中、后、层。接下俩让我们一起来看一下吧~1.定义二叉树结点首先我们来定义二叉树的结点,这里使用孩子表示法(想了解父母孩子表示法的可以自行查阅)。孩子表示法是指该结点除了存储本结点的数值之外,还具备指向自己左右孩子的指

2021-06-01 12:09:22 584 11

原创 堆排序和TOP-K问题

文章目录前言1. 建堆的时间复杂度2. 堆的排序3. TOP-K问题总结前言1. 建堆的时间复杂度快速排序(快排)O(NlogN)以插入的方式建堆O(NlogN)向下调整来建堆O(N)2. 堆的排序堆排序即利用堆的思想进行排序。步骤:1.建堆,排升序建大堆,排降序建小堆2.排序 -->利用堆删除的思想排序。即先让头尾结点交换,再把堆中元素个数减1,将交换后的二叉树(此时已经不是堆了)利用向下调整法重新变成堆。循环往复。直到排好整个数组。代码实现//向下调整v

2021-05-31 21:47:18 189 4

原创 二叉树和堆的概念和特点

文章目录前言一、树1.1 树的概念1.2 树的特点1.3 孩子兄弟表示法二,二叉树2.1 二叉树的特点2.2 二叉树的性质2.3 二叉树存储结构2.3.1 顺序存储结构2.3.2 链式存储结构:2.4二叉树(堆)的顺序存储结构及实现2.4.1堆的概念和结构总结前言本篇文章将带大家了解二叉树和堆。二叉树和堆的外形非常相似,都是一个下宽上窄的金字塔结构,常常让人傻傻分不清楚。这篇文章将介绍二叉树和堆的概念,区别,以及他们的特点。一、树1.1 树的概念树是一种非线性的数据结构,它是由若干个有限节点组

2021-05-29 11:54:53 1313 7

原创 堆的建立及增删查改等操作

heap.c#include <malloc.h>#include <stdio.h>void Swap(DataType* left, DataType* right){ int temp = *left; *left = *right; *right = temp;}void AdjustDown(DataType array[], int size, int parent){ //默认让parent标记左孩子,因为parent可能不存在右孩子 in.

2021-05-25 17:18:34 339 3

原创 LINUX基础命令

文章目录01. ls指令02. pwd指令03. cd指令04. touch指令05. mkdir指令06. rm**指令**07.man指令08. mv指令:09 .cat10. more指令11. less命令12. head指令13. tail指令14. zip/unzip指令15. tar指令:封包/解包,不打开它,直接看内容16. find指令: -name17. grep指令: -name18. date19. cal20. 重要的几个热键21. history01. ls指令功能:列出.

2021-05-24 23:08:58 1130 10

原创 列队用带头单链表实现

pra.c#include <malloc.h>#include <assert.h>#include <stdio.h>QNode* BuyQueueNode(DataType data){ QNode* newnode = (QNode*)malloc(sizeof(QNode)); if (newnode == NULL) { assert(0); return NULL; } newnode->data = data; n.

2021-05-21 15:18:45 187 2

原创 leetcode-力扣-20. 有效的括号

判断括号是否有效题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:tru.

2021-05-21 11:36:36 244 6

原创 栈的创建和增删查改等操作C语言实现

pra.c#include "pra.h"#include <stdio.h>#include <malloc.h>#include <assert.h>//栈的初始化void StackInit(Stack* ps){ ps->array = (Stack*)malloc(sizeof(Stack) * 6); ps->capacity = 6; ps->size = 0;}//插入元素void StackPush(St.

2021-05-21 00:09:04 405 1

原创 无头单链表基本操作实现

#include "SeqList.h"#include <stdio.h>#include <assert.h>#include <malloc.h> //链表初始化 void SeqListInit(struct SeqList* ps, int initCap){ assert(ps); // 1. 申请空间 ps->array = (DataType*)malloc(initCap * sizeof(DataType)); if

2021-05-20 22:24:42 114 2

原创 双链表基本操作实现

pra.c**#include "pra.h"#include <stdio.h>#include <malloc.h>#include <assert.h>//创造节点Node* BuyDListNode(DataType data){ Node* newnode = (Node*)malloc(sizeof(Node)); if (NULL == newnode) { assert(0); return NULL; } newnod.

2021-05-20 22:19:00 76

原创 顺序表和链表的区别

前言在上一篇文章中我们介绍了什么是链表和顺序表。这篇博客通过一个表格让大家更清晰的对比链表和顺序表的不同,也便于同学整理思路。总结要理解缓存利用率,就必须深入理解CPU的工作原理,在这里同学们先有一个印象,在以后的文章中会给大家详细介绍。希望这个表格能更好的帮助同学们记忆和整理思路。感谢同学们的观看...

2021-05-19 14:53:22 95

原创 顺序表和链表介绍

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录本篇梗概线性表1.1顺序表1.2链表总结本篇梗概线性表线性表是N个同类型的数据元素的有限序列。常见的线性表有:顺序表,队列,链表等线性表在逻辑上是连续的,也就是连续的一条直线结构。但在物理结构不一定连续,即地址不一定连续。线性表通常以数组和链式结构的形式存储。1.1顺序表顺序表是一种线性结构,他的元素地址连续。通常采用数组存储。顺序表分类:​ 1.静态数据表:使用定长数组存储​ 2.动态数

2021-05-13 22:40:31 96 3

原创 C语言思维导图

2021-05-06 18:53:17 130 1

原创 时间复杂度与空间复杂度

文章目录前言1.算法效率与时间复杂度2.空间复杂度总结前言数据结构与算法是程序员的必修课。从这篇文章开始,我们就正式进入了数据结构与算法的学习。本篇文章介绍了几个算据结构的基本概念,让我们一起看一下。1.算法效率与时间复杂度数据结构:数据结构是计算机存储,组织数据的方式,指相互之间存在一种或多种特定关系的数组元素的集合**算法:**算法就是一系列的计算步骤,用来将输入数据转化成输出结果算法效率:算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率

2021-05-06 11:52:16 1150 6

原创 动态内存管理

文章目录动态内存管理1,动态内存函数1,malloc和free2.calloc3.realloc2,柔性数组总结动态内存管理首先一看到这个标题我们会产生一个想法:内存管理好像能猜出来是干嘛的,毕竟我们已经学过了指针,对内存和地址有了一定的了解。但是动态又是什么意思呢?什么是动态管理?难道还有静态管理吗?现在让我们对计算机的底层再探究的更深一步吧。int a = 20;//在栈上开辟空间,属于静态开辟char b[10] = {0};//同上上述开辟空间方式的特点:1.空间开辟大小是固定

2021-04-24 21:32:06 145 1

原创 结构体,枚举与联合介绍

文章目录一,结构体1.1结构的声明1.2结构的自引用1.3结构体变量的定义和初始化1.4结构体传参二,枚举三,联合总结一,结构体结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。1.1结构的声明struct Stu{ char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号};//分号不能丢2.匿名结构体//匿名结构体类型struct{ int a; char b

2021-04-24 16:33:15 104 1

原创 与(&),异或(^);左值右值

文章目录本篇梗概1.与(&),异或(^)2.左值与右值,空间与内容的概念本篇梗概1.与(&),异或(^)任何数和 ‘1’ &都是它本身;任何数和 ’0‘ &都是0;任何数和 ‘0’ 异或(^)都是它本身 ;异或(^)支持交换律和结合律交换数据的两种方式:*xp=*xp ^ *yp;*yp=*xp ^ *yp;*yp=*xp ^ *yp;*xp=*xp + *yp;*yp=*xp - *yp;*yp=*xp - *yp;2.左值与右值

2021-04-21 09:47:56 82 1

原创 一些库函数的实现

文章目录本篇梗概1.memmove2.memcpy3.strstr4.strcat5.strcmp6.strcpy7.strlen本篇梗概一些库函数的实现1.memmovevoid* my_memmove(void* dest, const void* src, size_t count){ assert(dest != NULL && src != NULL); char* pdest = (char*)dest; char* psrc = (char*)src; if

2021-04-20 12:03:06 91 3

原创 一些指针与地址题目

文章目录本篇梗概一、大小端二,指针与地址的一些题目总结本篇梗概大小端一些指针和地址的题目一、大小端小端:int a[2]={1,2};大端:int a[2]={1,2};)二,指针与地址的一些题目 //一维数组 int a[] = { 1, 2, 3, 4 }; printf("%d\n", sizeof(a)); //16 printf("%d\n", sizeof(a + 0)); //4 printf("%d\n", sizeof(*a)); /

2021-04-16 12:33:19 843 7

原创 指针进阶(一)

文章目录本篇梗概一、数组指针与指针数组1,数组指针的用法2,指针数组的用法3、&数组名VS数组名二,数组参数1,一维数组传参2,二维数组传参总结本篇梗概数组指针与指针数组数组参数,及指针相关用法一、数组指针与指针数组数组指针数组指针是一个指针, 存放的是数组的地址int * pint; 是一个能够指向整形数据的指针。float * pf; 能一个够指向浮点型数据的指针。int (p)[10];是一个数组指针,这里要注意,由于【】的优先级高于 * ,所以必须加上()来保证p

2021-04-14 10:51:10 141 2

原创 数据在内存中的存储

文章目录本篇梗概一、数据类型介绍整形家族:浮点型家族:构造类型:指针类型:空类型:二、大小端介绍什么是大端小端:总结本篇梗概数据类型归类介绍大小端问题浮点型在内存中的存储解析一、数据类型介绍整形家族:charunsigned charsigned charshortunsigned short [int]signed short [int]intunsigned intsigned intlongunsigned long [int]signed long [in

2021-04-13 10:22:43 80 2

原创 三个算法程序

文章目录###1.冒泡算法//冒泡算法是从前向后依次比较两两元素的大小,若前项大于后项则交换位置,迭代n次void Sort(int ar[], int left, int right){ //冒泡排序 for (int i = left; i < right - 1; i++) { for (int j = left; j < right + left - 1 - i; j++)//+left是为了可以只排序部分数组;-i是因为每迭代一次都会将一个最大值放在数组最后,因此每

2021-04-11 09:41:05 137 4

空空如也

空空如也

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

TA关注的人

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