自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】AVL Tree总结

文章目录一、AVL Tree概念二、左/右单旋三、左/右双旋一、AVL Tree概念上次我们介绍的二叉搜索树也有弊端,如果数据是有序或接近有序二叉搜索树将退化为单枝,相当于查找时在顺序表中搜索元素,效率变的很低。我们这里介绍的AVL是一颗高度平衡的二叉搜索树,如果他有n个节点,其高度保持在O(log2n),搜索时间复杂度为O(log2n)。AVL树的要求是,保证每个节点的左右子树高低之差绝对值不超过1具体在树的结构里面加入一个平衡因子,去衡量二叉树的左右高度差是不是超过1,通过右边高度来减左边高

2022-04-21 16:08:45 1306 5

原创 【Linux】动静态库打包

目录一、软硬链接二、动静态库三、制作动静态库3.1、静态库3.2、动态库一、软硬链接软链接, ln -s用后者去链接前者,soft_link就是一个普通的正常文件,有自己独立的inode编号,他的data block中保存的就是指向的文件对应的路径类似于windows里的创建快捷方式,当我们把原来的文件删掉后,软链接soft_link找不到原来的地址硬链接我们发现后创建的硬链接hard_link没有自己独立的inode,都是786435,所以不是一个文件,只是依附于别人的一个文件

2022-04-21 14:05:38 1741 9

原创 【c++】二叉搜索树

目录一、概念二、操作2.1 查找2.2 插入2.3 删除一、概念二叉搜索树又称二叉排序树,它或者是一颗空树特性:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若他的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二、操作2.1 查找2.2 插入我们需要判断树为空,则直接插入,return true树不为空,按二叉搜索树性质查找插入位置,插入新节点这里当我们new出一个新的节点需要注意,把他进行链接,不然出了此函数就栈销毁了,导

2022-04-20 11:21:49 279

原创 【C++】多态

目录一、多态概念二、多态定义和实现三、多态原理四、抽象类五、单继承和多继承关系中的虚函数表一、多态概念多态即多种形态。当不同的对象去完成时会产生不同的状态比如:大家都去买票,买票的对象身份都各有不同。普通人买票,全价票;学生买票,是半价票;军人买票优先二、多态定义和实现实现多态必须满足两个条件:子类重写父类的虚函数(*父类必须是虚函数)必须是父类的指针或者引用去调用虚函数这里的重写表现在:派生类中有一个跟基类完全相同的虚函数(返回值类型,函数名,参数类型数量一致)虚函数重写的两个例

2022-04-20 10:53:18 143

原创 【每日一题】扑克牌大小

【扑克牌大小】扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER输入两手牌,两手牌之间用"-“连接,每手牌的每张牌以空格分隔,”-"两边没有空格,如:4 4 4 4-joker JOKER。请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。基本规则:(1)输入每手牌可能

2022-04-03 19:21:32 922

原创 【每日一题】最长无重复子数组、最长不含重复字符的子字符串

目录:1. 最长不含重复字符的子字符串2. 最长无重复子数组1. 最长不含重复字符的子字符串题目1: 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串

2022-04-03 12:56:18 124

原创 【每日一题】查找两个字符串中的最长公共子串

题目:【查找两个字符串a,b中的最长公共子串】查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!输入两个字符串返回重复出现的字符str1: abcdefghijklmnopstr2: abcsafjklmnopqrstuvwoutput: jklmnop此题实际上是一个动态规划问题值得注意有两个概念我们要区分开:子串:必须是连续出现的子序列:在一

2022-04-01 22:13:03 2353

原创 【每日一题】字符串通配符

问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。要求:实现如下2个通配符::匹配0个或以上的字符(注:能被和?匹配的字符仅由英文字母和数字0到9组成,下同)?:匹配1个字符注意:匹配时不区分大小写。输入:通配符表达式;一组字符串。输出:返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false数据范围:字符串长度:1\le s\le 100\1≤s≤100进阶:时间复杂度:O(n^2)\O(n2

2022-03-28 23:33:44 1541

原创 【C++】继承

一、继承的概念及定义二、父类和子类对象赋值转换三、继承的作用域四、派生类的默认成员函数五、继承和友元六、继承与静态成员七、菱形继承和菱形虚拟继承

2022-02-24 08:12:36 1020 8

原创 【Linux】进程控制

一、进程创建1. 为什么会有两个返回值?2. 写时拷贝二、进程退出1. exit vs _exit2. return三、进程等待前言:本节主要讲的是进程具体的调用方法及原理,如何调用对应的系统接口进行进程创建、等待和退出的方法一、进程创建先看一下创建进程的系统函数当返回 == 0,就是子进程当返回值 > 0,就是父进程,返回的是各子进程的id当返回 -1 , 创建失败1. 为什么会有两个返回值?我们创建一个进程 pid_t id = fork();都说子进程会拷贝父进程

2022-02-12 11:49:51 875

原创 【C++ 初阶】优先级队列(Priority_Queue)底层框架模拟实现

priority_queue code

2021-12-08 07:27:45 992 3

原创 【Linux】进程理解

一、冯诺依曼体系二、操作系统概念三、进程地址空间

2021-12-07 07:00:00 585 8

原创 【Linux】vim快捷键,再也不用VS,把队友飒到哭 + gdb调试

一、 vim键盘图二、 vim工具介绍三、 常见模式四、 vim快捷键

2021-11-23 07:27:00 3531 12

原创 【Linux】基本指令和权限理解

指令目录一、基本指令1.1 背景介绍1.2 基本指令1.2.1 ls1.2.1.1 which ls1.2.1.2 ll1.2.1.3 man is1.2.2 pwd1.2.3 tree1.2.4 cd1.2.5 touch和mkdir1.2.6 cp1.2.7 mv1.2.8 cat, more和less1.2.9 head和tail1.2.10 date1.2.11 cal1.2.12 stat1.2.13 find1.2.14 grep1.2.15 zip/unzip1.2.16 tar1.2.17

2021-11-22 08:05:34 7032 11

原创 【C++ 初阶】List底层框架模拟实现

目录一、List框架搭建1. List简介2. List使用案例1. List简介1. List简介1. List简介1. List简介1. List简介1. List简介1. List简介二、完整代码一、List框架搭建1. List简介list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是带头双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。与其他的序列式容器相比(array,ve

2021-11-21 22:56:55 921 1

原创 【C++ 初阶】vecotr底层框架模拟实现

目录一、前言二、vecotr框架搭建1.基本功能1.基本功能1.基本功能1.基本功能1.基本功能三、完整代码一、前言vector源代码看了一下过于复杂,这里取其精华把大体的框架和重要函数罗列出来并分析实现二、vecotr框架搭建在实现vector前需要弄明白这幅图,与string相似也会记录size和capacity的大小在这个数组中,有三个指针分别指向起始位置start,数据结束位置finish以及空间容量的末尾end_of_storage位置,剩余空间备用,如果增加的数据超过capacit

2021-11-16 18:23:22 831 4

原创 【C++ 初阶】string底层框架模拟实现

目录一、 前言二、 浅拷贝与深拷贝优缺点1. 浅拷贝2. 深拷贝3. 深拷贝现代版三、 string框架搭建1. 框架定义2. 构造函数3. 析构函数4. 赋值重载5. 实现扩容6. 增添数据7. 删除数据8. 数据查找9. iterator迭代器10. 插入/提取流与getline函数四. 完整代码一、 前言本节文章主要说明浅拷贝和深拷贝的优缺点,以及仿写string类的逻辑并分析实现过程如果人对一个事物感兴趣,总是那么好奇,就会刨根问底二、 浅拷贝与深拷贝优缺点1. 浅拷贝话不多说,先来上

2021-11-11 08:54:11 1251 9

原创 【C++ 初阶】类和对象

目录一、面向过程vs面向对象二、类的限定符及封装三、类的实例化四、this指针五、默认成员函数1. 构造函数2. 析构函数3. 拷贝函数4. 赋值运算符重载一、面向过程vs面向对象C语言面向过程,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题C++是基于面向对象,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成,C++不是纯面向对象的语言,C++既有面向过程,也有面向对象可以混合编程。C语言面向过程,数据和方法是分离的。CPP面向对象,数据和方法是封装在一起的,如struc

2021-10-19 22:46:52 557 5

原创 【C++ 初阶】 新语言入门介绍:命名空间,(全/半)缺省函数,函数重载,引用,内联,auto

花了三个月的时间重新巩固了一遍c语言+两个月的时间码数据结构这是一个崭新的章节,剃个头开始新的旅程,冲!昨晚刚看完长津湖,深切感受到落后就是挨打,少年强则国强,我们要学习,要进步,码出Programmer的一片天空入门目录一、C++介绍二、一、C++介绍背景就不多做介绍了,直接开门见山C++语言发展最重要的两个版本里程碑:C++98和C++11C++98: 是第一个C++标准版本,以模版方式重写C++标准款,引入了STL(标准模版库),简而言之语言比较完善C++11: 增加了许多特性如.

2021-10-19 00:45:04 299 8

原创 八大排序算法sum up,存干货,[ 建议收藏!!! ]

目录排序算法一、插入排序1. 直接插入排序2. 希尔排序二、选择排序1. 选择排序2. 堆排序三、交换排序1. 冒泡排序2. 快速排序2.1 Hoare2.2 前后指针法四、归并排序五、非递归排序⚠️注意:以下都是按照升序进行排列一、插入排序1. 直接插入排序核心思想:把一个数插入到有序区间,保持这个区间有序,当前第n+1个数插入到前面前面的arr[0]到arr[n-1]已经排好序,此时用arr[n]与前面的arr[n-1], arr[n-2]...的值进行比较找到合适的位置将arr[n

2021-10-09 00:40:20 410 5

原创 堆和队列(Stack && Queue)数据结构的基本操作实现详解

目录一、前言二、堆(stack)三、队列(Queue)一、前言今天介绍一下栈和堆栈:是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶。另一段为栈底栈的数据遵守后进先出LIFO(last in first out)的原则压栈:栈的插入操作叫做进栈/压栈,如数据在栈顶出栈:栈的删除操作叫出栈,出数据也在栈顶这里有很多人问栈和队列属于线性结构吗?可以用链表实现吗?答案是肯定的,两者都可实现栈和队列,数据结构需要适配不同的应用场景。而顺序表和链表没

2021-08-22 22:35:06 539 4

原创 双链表(DoubleLinkList)数据结构的基本操作实现详解,重磅来袭!结构复杂但高效~

目录一、前言二、整体框架设计三、函数实现1. createDBLSTNode2. doubleListInit3. doubleListPrint4. doubleListDestory5. doubleListEmpty6. doubleListSize7. doubleListPushBack8. doubleListPushFront9. doubleListInsert10. doubleListErase11. doubleListPopBack12. doubleListPopFront13.

2021-08-20 07:57:05 845 8

原创 链表(LinkList)数据结构的基本操作实现详解,纯干货

目录一、前言二、整体设计框架三、函数实现1. createLSTNode2. linkListPushBack4. linkListPrint5. linkListDestory6. linkListSize7. linkListEmpty8. linkListPushFront9. linkListPopBack10. linkListPopFront11. linkListNodeFind12. linkListInsert13. linkListErase四、完整代码一、前言本篇主要实现链表的一些

2021-08-19 07:48:27 5453 7

原创 顺序表(SequenceList)数据结构的基本操作实现详解

目录一、前言二、整体设计框架三、函数实现四、完整代码一、前言数据结构非常之多,后续小编会逐个更新,简单的存储数据一般有顺序表,链表(单链表和双链表),串等创建完数据结构后不仅要存储数据,以后还需要查找数据,如果高效的进行查找也需要搜索树,哈希表等这样的结构来实现有很多人有这样一个疑问:是先学数据结构还是先学算法?其实数据结构和算法是不分家的,数据结构中包含一些算法,有些算法的解决又离不开数据结构,比如实现Dijkstra最短路径问题是基于Graph的数据结构实现的二、整体设计框架实现顺序表,

2021-08-17 23:13:33 3689 5

原创 【C语言】编译过程,满满的干货!!!

程序环境和预处理一、程序翻译和运行环境二、预处理详解1. 预定义符号2. define 定义宏3. #和##的区别4. 宏和函数好坏比较5. 命名约定6. 头文件中 < >和" "区别7. 条件编译一、程序翻译和运行环境翻译环境:在翻译环境中,我们写的源代码转换为可执行的机器指令,让机器能够看的懂,模块包括预处理,汇编,编译和链接最终生成的可执行程序.exe或者 a.out每个源文件通过编译分别转换成目标代码(.o文件)每个目标文件由一个链接器(linker)捆绑在一起,形成一个可执

2021-07-31 21:25:21 257 2

原创 【C语言】动态内存管理以及开辟的注意事项⚠️

目录一、为什么存在动态内存二、动态内存函数1. malloc2. calloc3. realloc三、动态内存开辟注意事项四、柔性数组一、为什么存在动态内存一般数组开辟空间是连续固定大小的,数组必须申明制定大小的长度,但在现实生活中的数据我们不可能一棒子打死,假设服务器就开辟了固定大小的空间给用户使用,如果数据溢出就有问题了,相反,如果开辟的太大就会存在空间浪费!而动态内存就很好的解决了这个问题,一开始开辟了一份空间,如果不够用再多分配一份,这样配置更加的灵活,便捷。二、动态内存函数1. mall

2021-07-31 12:41:07 171

原创 【C语言】用例子一次性讲清楚结构体和联合体区别,xdm看过来!

自定义类型一、结构体1. 结构体声明2. 结构体初始化3. 结构体内存对齐3. 结构体位段二、联合体(共同体)三、枚举一、结构体1. 结构体声明正常声明,特殊声明以及自引用普通的声明方式一般为:struct Car{ char carBrand[20]; int carEngineVolume; int year; char manufacturingCountry[20];};匿名声明方式:struct { char carBrand[20]; int carEngineVo

2021-07-28 23:49:26 161 1

原创 【openCV】环境搭建(Xcode)+入门膨胀腐蚀

我本人用的是Mac下的Xcode进行环境搭建,网上有很多搭建教程写的不够详细,现在把过程列出来目录一、 环境搭建二、初识Dilation和Erode一、 环境搭建话说万事开头难,但是跟着我一步步搭建保证不难!首先安装Homebrew,在国内有时候官网是上不去的,可以直接在terminal下执行这个命令/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2021-06-28 23:14:02 161 1

原创 【C语言进阶】自定义类型

目录一、数组和结构体区别二、结构体内存对齐三、位段及应用一、数组和结构体区别数组是一组相同类型的元素的集合结构体也是一些值的集合,结构的每个成员可以是不同类型的二、结构体内存对齐第一个成员在结构体变量偏移量为0的地址处第二个成员往后的所有成员,都放在第一个对齐数(成员的大小和默认对齐数的较小值)的整数倍的地址处其他成员变量要对齐到某个数字(对齐数)的整数倍的地址对齐数 = 编译器默认的一个对齐数与该成员大小的较小值结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍如果嵌

2021-06-19 18:40:29 72

原创 【C语言进阶】字符串与内存函数memcpy、memmove、strcmp、strstr实现

函数实现快速预览:1. memcpy()函数不能拷贝重叠的内存2. memmove函数可以处理内存重叠的情况3. strcmp任何类型都可以比较,前提是强制转换成char类型4. strstr函数中查找src所有字符串是否能在dest中找到目录一、void* memcpy(void* dest, const void* src, size_t num)二、void* memmove(void* dest, const void* src, size_t num)三、int strcmp(cons

2021-06-19 18:26:42 185

原创 【C语言进阶】数据的存储

目录一、数据在内存中存储二、大小端概念三、无符号/有符号一、数据在内存中存储一般局部变量是放在栈区上的,栈区的习惯是:先使用高地址,再使用低地址相反数组随着下标的增长,地址是由低到高变化的int a = 10;int b = 20;printf("%p %p\n", &a, &b);int arr[] = {10,20};printf("%p %p \n", &arr[0], &arr[1]);Output:数据在内存中以2进制的形式存储对于整

2021-06-08 22:28:13 169

原创 【C语言】一、指针详解

指针目录一、指针是什么二、指针和指针类型三、野指针是什么,如何避免?四、指针运算1. 指针的加减运算2. 指针减指针五、二级指针,三级指针例子六、指针数组和数组指针六、数组和结构体一、指针是什么指针是编程语言中的一个对象,利用地址,他的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的成为指针。意思是通过它能找到以它为地址的内存单元那么通过地址能找到值,地址的内存单元是怎么产生的呢?如果是32机器,通电之后会产生电信号,点信号

2021-05-17 21:15:36 148

原创 【C语言】结构体(传值vs传址)

#include <stdio.h>struct B{ char c; short s; double d;};struct Stu{ struct B sb; char name[20]; int age; char id[20];};void print1(struct Stu s){ printf("%c %d %lf %s %d %s \n", s.sb.c, s.sb.s, s.sb.d, s.name,

2021-05-17 20:24:14 361

原创 【C语言】二、操作符详解(隐式类型转换之整型提升,算术转换)

目录整型提升算术转换整型提升隐式类型转换:c的整型算术运算总是省去整型类型的精度为代价的。为了获得精度,表达式中的字符和短整型操作数载使用之前被转换为普通整型,这种转换称为整型提升。整型提升的意义:表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度 一般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长 度。通用CPU(general-purpose

2021-05-17 19:59:14 137

原创 【C语言】一、操作符详解(各操作符介绍,表达式求值)

博观而约取,厚积而薄发。——《杂说送张琥》操作符分类一、算术操作符二、移位操作符1. 左移操作符规则2. 右移操作符规则I、逻辑右移II、算术右移三、位操作符四、赋值操作符五、单目操作符六、关系操作符七、逻辑操作符八、条件操作符九、逗号表达式一、算术操作符+ - * / %注意事项:1. 除了此符号 % 外,其他可用于整数和浮点数2. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。3. 对于操作符 / 如果两个操作数都为整数,执行整数除法。只要有符点数那么执行的就是符.

2021-05-10 22:29:03 354

原创 C语言三子棋Tick-Tck-Toe代码实现

三子棋游戏大家应该都玩过,游戏规则就不多做介绍啦,我们来看看是如何用代码实现的?目录1. 思维导图,一目了然2. 设计思路1. 思维导图,一目了然2. 设计思路结合上图,我们可以拆分为三个文件进行编写:test.c文件用于测试游戏的逻辑game.c 用于相关函数实现game.h 相关函数声明...

2021-05-05 14:12:25 645 2

原创 [C语言]超详细讲解扫雷游戏(递归+标记),附思维导图

I have a dream today! ---Martin Luther King 无论是90后还是00后,相信大家都在xp系统上玩过扫雷游戏,我们初中电脑老师神采飞扬的炫耀过自己初级9x9棋盘扫雷成绩,只耗时2秒,问有没有来挑战的,现在想想给你80个雷,你要不猜一下试试吧~扫雷游戏设计思维导图结构分析+图片案例1. game.h内容分析2. test.c内容分析3. game.c内容分析代码实现game.htes.

2021-05-05 14:11:20 2257 9

原创 代码超详细讲解:C语言进程间通信之SuperMario管道pipe(无名管道)

client和server之间如何通信举个简单例子:client端标准输入standard input,读进一个路径到buffer中,并把路径写入管道服务器从管道中读取这个路径到buffer中进行read操作:read成功,写入管道返回给clientread失败,也要回应client错误信息client从管道中stdout到buffer来显示内容管道由pipe函数创建,并提供一个单向数据流,管道一般是两个不同进程间的通信,父进程和子进程(只能是亲缘关系之间),先由一个父进程创建一..

2021-04-30 17:00:56 635 2

原创 【C语言】一维二维数组注意事项,客观来瞧一瞧

春蚕到死丝方尽,人至期颐亦不休。一息尚存须努力,留作青年好范畴。 ——吴玉章Array一维数组1. int 类型2. char 类型二维数组1. 完全初始化2. 不完全初始化3. 可省略ROW的初始化4. 还有一种不知名初始化⚠️注意事项1. 用指针的方式对二维数组进行打印2. 用指针的方式对二维数组进行打印一维数组I 一维数组在内存中是连续存放的II 随着数组下标的增长,地址是由低到的高变化1. int 类型⚠️注意事项:一维数组中的大小,只能放常量表达式,尽量不要用变

2021-04-29 00:24:40 2449 5

原创 VS Code SSH配置详解

本文以Windows为例建立SSH连接免密登陆建立SSH连接首先确认在本地cmd中输入:ssh username@Ip address确认支持ssh命令,否则安装openssh-server在Visual Studio Code中进行插件安装安装下图进行文档配置根据情况自行修改,然后就可以输入password进行登陆免密登陆用了一段时间每次都要输入密码非常重复,我们可以使用密钥进行免密登陆,大概的原理是本地生成公钥和私钥,将本地的公钥复制到远程Server进行存储,自己留着

2021-04-25 22:31:21 3023

空空如也

空空如也

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

TA关注的人

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