自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【二叉树刷题】二叉树的前中后序的递归遍历和迭代遍历

递归遍历三要素1. 确定递归函数的参数和返回值、2. 确定终止条件、3. 确定单层递归的逻辑

2022-11-27 21:03:36 214 2

原创 【栈和队列刷题】滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。

2022-11-27 16:38:19 174

原创 【栈和队列刷题】 有效的括号、删除字符串中的所有相邻重复项、用栈实现队列、用队列实现栈

有效的括号、删除字符串中的所有相邻重复项、用栈实现队列、用队列实现栈

2022-11-26 21:07:55 734

原创 【STL】list用法详解及模拟实现

list介绍、list的迭代器失效、实现的接口、代码实现、list与vector的对比

2022-11-22 20:33:16 449 4

原创 【STL】自定义string类

string的文档介绍、深浅拷贝、实现的接口、默认成员函数部分、修改及访问部分迭代器部分、容量部分、方括号访问部分、关系运算符部分、具体的代码实现

2022-11-16 19:46:42 933 4

原创 二叉搜索树(k模型、kv模型)介绍及底层实现、

二叉搜索树的概念,二叉搜索树的代码实现,二叉搜索树的应用,k模型,kv模型,kv模型的代码实现,二叉搜索树性能分析

2022-11-12 19:06:50 663 3

原创 Linux:环境变量

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。环境变量通常具有某些特殊用途,通常具有全局特性,可以被子进程继承下去。

2022-11-02 20:30:16 1482 4

原创 模板和泛型编程(上)

利用C++函数重载的特性可以写一个通用的交换函数,可以交换数据类型不同的数据,但这样代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数,而且极容易出错。这里的Vercor不是一个具体的类,他是类模板,通过这个模板来识别参数的类型并生成对应的模板类。类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟,然后将实例化的类型放在中即可,类模板名字不是真正的类,而实例化的结果才是真正的类,类模板只能够通过显式实例化。当我们用不同类型的参数使用函数模板时,就称为函数模板的实例化。

2022-10-29 21:32:28 847 3

原创 Linux:进程描述、进程创建(fork)、进程状态(僵尸进程、孤儿进程)

操作系统进程的基本概念程序是一个静态的概念,程序本质就是一个文件,是静态的,存储在磁盘当中。进程是一个动态的概念,程序运行起来之后,就叫做进程,静态是动态的,由操作系统管理。进程是程序的一个执行实例,正在执行的程序等,从内核观点看,进程就是担当分配系统资源(CPU时间,内存)的实体。进程被放到一个叫做进程控制块的数据结构中(PCB),可以看成是进程属性的集合。Linux中PCB是task_struct ,task_struct是Linux内进程创建(fork)进程状态僵尸进程孤儿进程

2022-10-24 20:40:49 1060 3

原创 【STL】模拟实现优先级队列

priority_queue介绍仿函数模拟实现priority_queue介绍优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机

2022-10-17 20:30:07 171 4

原创 【STL】vector的模拟实现

vector简介模拟实现需要注意的问题1. Capacity增长问题2. 使用memcpy拷贝问题3. 迭代器失效问题代码实现

2022-10-16 11:22:25 784 5

原创 删除链表、反转链表,实现最小栈、逆波兰表达式、压栈弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。来源:力扣(LeetCode)来源:力扣(LeetCode)

2022-10-14 20:44:12 120

原创 有序数组的平方、最小连续子数组、螺旋数组

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。给定一个含有 n 个正整数的数组和一个正整数 target。来源:力扣(LeetCode)来源:力扣(LeetCode)来源:力扣(LeetCode)

2022-10-13 21:03:49 179

原创 vim和gcc/g++的使用、项目自动化构建工具make/Makefile

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。如果要生成一个test,就要先生成一个lc.o,要生产lc.o就要先生成一个lc.s,这样一层一层往下,就完成了一步步的构建。[插入模式]切换至[正常模式]: 处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下「ESC」键转到[正常模式]再删除文字。

2022-10-13 19:16:14 811 3

原创 数组中查找目标值,原地移动数组

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入。来源:力扣(LeetCode)来源:力扣(LeetCode)

2022-10-12 19:30:05 507

原创 Linux权限:权限的概念及管理、粘滞位

上面每一行从左到右数,第一位表示问价类型,第2~10位表示权限(权限前三位表示文件所有者的权限,中间三位表示文件所属用户组的权限,最后三位表示其它用户的权限),后面那个数字表示连接数,后面连个root分别代表所属用户(目录的所有者)和所属用户组,再后面的4096、8360等等代表文件的大小,后面的时间表示文件最新修改的日期,最后的英文表示文件名。可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

2022-10-09 20:06:02 1300 4

原创 C++动态内存管理

如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申请空间失败时会抛异常,malloc会返回NULL。...

2022-08-10 14:30:50 431 15

原创 C++类和对象(初始化列表,友元,静态成员,内部类)

内部类就是外部类的友元类,内部类可以通过外部类的对象参数来访问外部类中的所有成员。但是外部类不是内部类的友元,不能通过外部类的对象去访问内部类1. 内部类可以定义在外部类的public、protected、private都是可以的。2. 注意内部类可以直接访问外部类中的static、枚举成员,不需要外部类的对象/类名。3. sizeof(外部类)=外部类,和内部类没有任何关系...

2022-07-29 14:33:33 426 12

原创 C++入门基础(下篇)

在早期的标准里,规定使用auto修饰的变量,是具有自动存储器的局部变量,而C++11标准规定了auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。//类型声明为auto,可以根据a的类型自动推导b的类型也为intdoubletmp=2.2;//同理,推导c的类型为douobleautod=Test1();return0;}注意。......

2022-07-21 15:29:18 1099 30

原创 C++类和对象(二)

因为对象是定义在函数中的,函数调用会建立栈帧,栈帧中的对象构造和析构也要符合后进先出的原则。*所以st1先构造,st2后构造,st2先析构,st1后析构注意数据结构的栈和堆和内存分段区域的栈和堆没有绝对的联系,属于两个学科各自的命名,但是数据结构栈和系统分段栈(函数栈帧)的对象都符合后进先出。.........

2022-07-15 20:40:25 1299 35

原创 C++类和对象(一)

目录面向过程和面向对象初步认识类的定义类的作用域类的实例化类的访问限定符及封装类的对象大小计算类成员函数this指针面向过程和面向对象初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。比如一个外卖系统面向过程:下单、接单、送餐三个过程面向对象:客户、商家、骑手,关注的是三个类对象之间的关系类的定义class Name{ //类体:由成员函数和成员变量组成

2022-07-13 20:23:38 10821 27

原创 C++日期类的实现

通过日期类的实现可以帮助我们更好地理解类的“六大默认成员函数”。

2022-07-09 19:38:26 1450 19

原创 C++入门基础(上篇)

为什么我们会在同一个作用域中声明相同的变量或者函数呢?1.普通的命名空间2.嵌套的命名空间3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中C++为了防止命名冲突,把自己库里面的东西都定义在一个std的命名空间中1.使用命名空间的名称+作用域限定符虽然麻烦,每个地方都要指定,但这是最规范的方式2.使用using将命名空间中成员引入3.使用using namespace命名空间名称引入看

2022-07-06 20:50:37 2111 26

原创 万字详解八大排序 必读(代码+动图演示)

U.S.News2022年的大学排行榜交换函数,后面会用到2.1插入排序基本思想动图展示 代码实现 复杂度分析基本思想动图展示希尔排序的特性代码实现 复杂度分析每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。基本思想 动图展示代码实现 复杂度分析基本思想动图展示代码实现 复杂度分析所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,

2022-07-03 12:43:30 1006 44

原创 深度剖析堆及代码实现

目录1. 堆的概念和性质什么是堆:堆的性质:2.堆的实现定义堆主函数向下调整算法堆的创建堆的插入向上调整算法堆的删除获取堆顶元素堆的判空堆内元素个数打印堆内元素堆的销毁建堆的时间复杂度推导3.堆的应用堆排序现实中我们通常把堆使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。 将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。堆是非线性数据结构,相当于一维数组,有两

2022-06-25 19:39:11 637 26

原创 你真的了解二叉树吗?

讲二叉树之前先了解一下树的概念,树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。· 有一个特殊的结点,称为根结点,根节点没有前驱结点· 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合 Ti(1.........

2022-06-18 22:41:10 965 9

原创 二叉树的前、中、后序遍历

所谓二叉树遍历是按某种特定规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次。访问结点所做的操作依赖于具体的应用问题。 遍历是二叉树上最重要的运算之一,也是二叉树进行其它运算的基础。二叉树的遍历有:前序/中序/后序的递归结构遍历:1. 前序遍历(先根遍历)——访问根结点的操作发生在遍历其左右子树之前(根->左子树->右子树)。2. 中序遍历(中根遍历)——访问根结点的操作发生在遍历其左右子树之中(左子树->根->右子树)。3. 后序遍历(后根遍历)——访问根结点的操作发生在遍历其左右子树之后(

2022-06-12 20:17:28 17177 20

原创 栈和队列的实现

栈的实现#define _CRT_SECURE_NO_WARNINGS#pragma once#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <stdbool.h>typedef int STDataType;typedef struct Stack{ STDataType* a; int top; int capacity;}Stack;vo.

2022-05-08 16:27:26 246 14

原创 带头双向循环链表的实现

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <assert.h>#pragma once#include <stdlib.h>typedef int LTDataType;typedef struct ListNode{ LTDataType val; struct ListNode* next; struct ListNode* prev;}ListNode;ListNo.

2022-05-06 10:13:12 631 8

原创 链表刷题(c语言)

力扣struct ListNode* removeElements(struct ListNode* head, int val){ struct ListNode* cur = head; struct ListNode* tail = NULL; while (cur) { if (cur->val == val) { struct ListNode* next = cur->next;

2022-05-02 21:51:42 2567 5

原创 单链表的增删改查

#define _CRT_SECURE_NO_WARNINGS#pragma once#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef int SLTDataType;typedef struct SListNode{ SLTDataType data; struct SListNode* next;}SLTNode;void SListPrint(SLTNod...

2022-04-28 21:22:39 2943 10

原创 顺序表的增删查改

SeqList.h#define _CRT_SECURE_NO_WARNINGS#pragma once#include<stdlib.h>#include<stdio.h>#include<assert.h>typedef int SLDateType;typedef struct SeqList{ SLDateType* array; //指向动态开辟的数组...

2022-04-22 20:12:41 652 6

原创 预处理详解

1.预定义符号__FILE__ //进行编译的源文件__LINE__ //当前文件的行号__DATE__ //文件被编译的日期(格式"mm dd yyyy")__TIME__ //文件被编译的时间 (格式"hh : mm : ss")__STDC__ //如果编译器符合C标准(C89或C99),那么值为1示例:2.宏定义简单的宏:格式:#define 标识符 替换列表示例:...

2022-04-20 16:13:01 1100 5

原创 指针笔试题讲解

笔试题1:int main(){ int a[5] = { 1, 2, 3, 4, 5 }; int* ptr = (int*)(&a + 1); printf("%d,%d", *(a + 1), *(ptr - 1)); return 0;}&a取出的是整个数组的地址,+1跳过整个数组,然后强转为int*类型,把数组指针强转为了整形指针,表明ptr一次只能访问一个整数,*(a+1)中的a是数组首元素地址,+1解引用访问数组第二个元素,*...

2022-04-18 19:23:12 588 10

原创 指针和数组笔试题解析

在讲解题目之前我们先来了解一些基础知识。数组名通常来说是数组首元素地址,但有两个例外:1.sizeof(数组名),这里数组名表示整个数组,计算的是整个数组的大小2.&数组名,这里数组名表示整个数组,取出整个数组的地址strlen():计算字符串str的长度,直到'\0'结束,不包含'\0'字符sizeof():计算的是对象所占内存的大小...

2022-04-14 22:00:41 321 16

原创 深入理解结构体

一.结构体1.结构体类型的声明结构体是一些值得集合,这些值被称为成员变量,结构体的每一个成员可以是不同类型的变量。声明:struct tag{ member - list;}variable-list;那么描述一个学生该怎么描述呢?struct Stu{ char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号}; //分号不能丢声明结构体的时候,还...

2022-04-13 19:34:12 490 13

原创 详解指针(2)

目录一.函数指针二.函数指针数组三.指向函数指针数组的指针一.函数指针看一段代码表明test和&test都表示函数地址。如果我们想要保存函数test的地址怎么办呢?用函数指针即可,void(*pf)()能存储函数test的地址。pf和*先结合,表面pf是一个指针,指向的是一个函数,这个函数是无参的,返回类型是void类型的。《c陷阱和缺陷》里有两段经典代码,我们来分析一下(*(void (*)())0)();void(*)()是强制类型转换,把

2022-04-12 11:43:04 609 13

原创 C语言实现通讯录

contact.h#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<assert.h>#include<stdlib.h>enum option{ EXIT, //0 ADD, //1 DEL, //2 SEARCH, //3 MODIFY, ...

2022-04-11 17:01:31 2387

原创 详解指针(1)

一.字符指针我们先了解一下指针的概念1.指针就是一个变量,用来存放地址,地址唯一标识一块内存空间。2.指针的大小是固定的,32位平台是4个字节,64位平台是8个字节。3.指针是有类型的,指针的类型决定了指针的+-整数的步长,也决定了指针解引用操作的访问权限。4.指针的运算(指针+-整数,指针-指针,指针的关系运算)字符指针的类型位char*。① int main() ...

2022-04-11 16:34:08 165 1

原创 字符函数和字符串函数进阶篇(上)

一、求字符串长度1.strlensize_t strlen ( const char * str );1.字符串以'\0'作为结束标志,strlen会返回'\0'字符之前出现的字符的个数,不包括'\0'。2.指向的字符串必须要以'\0'结束。3.strlen返回值是size_t,是无符号的(注意)举个易错例子因为strlen(str2)和strlen(str1)返回类型都是size_t的,那么两个无符号数相减得到的结果也是无符号类型的,-3被当成无符号整数将会是一个很大的

2022-04-05 15:59:23 103 1

空空如也

空空如也

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

TA关注的人

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