自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 手撕二叉搜索树(排序树)

例如:以上就是今天要讲的内容,本文仅仅介绍二叉搜索树的查找,插入,删除的代码实现,和一些细节注意。

2023-07-29 17:56:28 117

原创 Linux信号

在生活中的信号,有早上的起床闹钟,过马路的红绿灯,快递的运输提示等等这些都可以称为信号,而对信号的处理也大都不相同。

2023-05-17 00:26:24 119

原创 C++的多态

在生活中,我们会有很多这种场景,不同的角色执行相同一件事,得到不同的结果,在编程上实现这种面对不同的角色执行同一件事,得到不同的结果时,就需要用到多态来实现。多态就是声明一个基类对象的指针或者引用,指向派生类的对象,妙的是这个指针或者引用的类型是基类的,但是内容(指针或者引用所指向的东西)却是派生类的。好处就是可以在运行的时候根据环境的变化修改它所指向的派生类,根据条件的变化、用户的选择等等等等修改它的所指。

2023-04-24 00:05:11 159

原创 C++的继承

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用例如:创建一个面向学生老师保安食堂阿姨等等角色的类,而姓名,年龄,地址,性别,这些是每一个人都会有的信息,我们可以做为一个基类,来给不同的角色继承,再追加一些职业信息等等数据,以些产生新的派生类。

2023-04-14 23:10:39 114

原创 C++ vector模拟实现

1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。

2023-01-09 00:46:48 110

原创 C语言文件操作与系统文件操作接口

复习C文件IO相关操作认识文件相关系统调用接口

2022-12-28 21:50:57 430

原创 Linux的进程控制大总结

在linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。子进程和父进程的地址一样,数值却不一样?写时拷贝:通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。

2022-12-14 17:28:05 220

原创 Linux环境变量

PATH : 指定命令的搜索路径。HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。SHELL : 当前Shell,它的值通常是/bin/bash。

2022-12-08 13:48:32 160

原创 Linux的进程状态

之前在介绍PCB的时候给大家说过PCB中有一项是保存我们进程的状态,我们可以看一下Linux内核里边的源码里边的定义

2022-12-05 01:20:56 922

原创 冯诺依曼体系结构&&操作系统(Operator System)

面对对象写的代码就是先建模,再映射

2022-12-01 01:30:10 557

原创 Linux下创建一个git仓库详细介绍

git仓库是现在流行的云端仓库,各大企业都有在使用,我们应该掌握其使用方法。

2022-11-19 00:44:36 2805

原创 Linux项目自动化构建make&Makefile

make/Makefile前言一、make是什么?二、使用步骤1.单文件形式2.多文件形式3.项目清理原理前言一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高

2022-11-18 00:56:16 370

原创 C/C++内存分布管理

首先是通过调用operator new 全局函数,实现空间的开辟,然后再去调用我们的构造函数。

2022-10-23 23:19:48 247

原创 C++类和对象初始化列表友元类成员类函数内部类匿名对象拷贝对象编译器的优化

定义时不添加static关键字,类中只是声明3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制6.静态函数,不能调用非静态成员7.可以用类名去调用,静态函数8.非静态函数,可以调用静态成员9.类的静态成员变量在使用前必须先初始化。

2022-10-21 00:40:08 330

原创 C++日期类的实现

构造函数,拷贝函数,赋值函数,析构函数,运算符重载的训练

2022-10-14 22:28:39 406

原创 C++ 类默认成员函数

如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。对于Date类,可以通过 Init 公有方法给对象设置日期,但如果每次创建对象时都调用该方法设置信息,未免有点麻烦,那能否在对象创建时,就将信息设置进去呢。是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证。

2022-10-14 00:57:36 456

原创 Linux的权限概念

Linux的权限概念

2022-10-06 01:05:23 266

原创 Linux的基本指令

mkdir grep find mv ls cat who tar unzip man

2022-10-04 00:09:27 154

原创 C++类和对象

类的封装

2022-09-25 00:52:06 55

原创 C++基础语法

C++的命名空间,缺省参数,函数重载,引用

2022-09-16 12:50:34 178

原创 用C语言实现冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序

冒泡排序冒泡排序的过程就是两两比较,只要前一个比后一个大的,就进行交换,每一趟只能确定一个数的最终位置。由于每一趟只能确定一个数的最终位置,所以需要两层循环,时间复杂度为:O(N^2),空间复杂度:O(1)。void BubbleSort(int* a, int n){ for(int i = 0;i < n;i++) { //这里加了个小优化,如果这个数组已经是有序了,flag就为零,后面就不再运行,直接退出循环 int flag

2022-09-07 20:10:04 1418 1

原创 关于二叉树一些接口函数递归实现(有详细递归过程)

需要注意的是,满二叉树肯定是完全二叉树,而完全二叉树不一定是满二叉树,这里还是用层序的方法去判断,如果一个二叉树在遍历到NULL的时候,后面还有不是空的树出现,就肯定不是完全二叉树......

2022-08-28 19:53:58 250

原创 队列,栈,循环队列的实现

队列我们用的是链表实现,typedef int QDataType;// 链式结构:表示队列typedef struct QListNode{ //创建一个指向结构体的指针 struct QListNode* _next; //data代表链表中存储的数据 QDataType _data;}QNode; // 队列的结构typedef struct Queue{ //创建一个指向另外一个结构体的指针,用做队列的头 QNode* _fron

2022-08-18 22:24:44 166

原创 双向带头循环链表的实现以及动态顺序表和单链表的对比

双向循环链表对比单链表,他的实现会更简单,不需要考虑太多双向带头循环链表的结构体声明typedef int DLTDataType;typedef struct DListNode{ //节点里面包含两个指针,一个是指向他上一个节点的指针prev //另外一个就是指向他下一个节点的指针next struct DListNode* prev; struct DListNode* next; DLTDataType data;}DLTNode;首先.

2022-08-13 14:36:39 129

原创 使用宏的注意事项和一些功能实现

用宏实现一个 比较两个数的大小,宏对比函数的优势和劣势,宏是不检查参数类型的,函数是要检查参数类型,宏是可以比较任何用大小来比较的数值,宏的运行速度相比函数,少了调用,返回,宏只是替换,所以速度会更快一些,相对函数,宏也是有劣势的,宏不能调试,也不能递归,代码替换后,会比较长,宏可能会带来运算符优先级的问题,导致程序容易出现错#include <stdio.h>#define COMPARY(n,m) ((n)>(m)?(n):(m))int main(){ print

2022-08-08 01:27:01 138

原创 一个exe程序的生成过程

首先我们写了一个main.c的程序,点击执行的时候 ,会有四个步骤,分别是预编译/预处理,编译,转汇编,链接。首先是预编译,也叫预处理,我们在vs code上演示一下,使用命令 gcc main.c -E -o main.igcc 是编译器 main.c是你要编译的文件名字 —E是编译到预处理就停止的指令,-o是指定输出为一个文件,后面加文件名,ls是把文件夹里面的文件都显示出来,这时候会发现多了一个main.i文件,这是我们通过指令生成的一个运行到预处理就停止的文件,我们可以看到,我们只.

2022-08-07 21:22:11 2207

原创 关于strncat和strncpy和atoi函数的代码实现外加寻找单身狗代码实现

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <string.h>void Find_single_dog(int arr[], int sz, int* dog1, int* dog2){ int i = 0; int ret = 0;//先异或整个数组,来得到我们进行分组的判断条件

2022-07-27 10:58:54 69

原创 动态内存版通讯录

我们用malloc函数开创结构体,来实现动态内存增加的通讯录,有增,删,查,改四个功能,分了三个文件来编写,一个是main函数文件,一个是声明文件,一个是函数实现文件。动态版的,就是在结构体上增加了一个指向通讯录数据的结构体指针,一个统计通讯录大小的capacity容量,和一个统计通讯录信息数量的count,只要通讯录的数量跟容量一样了,就自动增容,#pragma once#pragma once#include <stdio.h>#include <assert.h>

2022-07-26 23:29:38 61

原创 关于string.h库函数的一些函数功能,和代码模拟实现

关于string.h库函数里面的一个比较字符串大小的函数,库函数的格式是:int strcmp ( const char * str1, const char * str2 );我们在使用的时候,需要给他传两个需要比较大小的字符串地址,如果第一个字符串的ASCII码大于第二个字符串ASCII码的话,就会返回一个大于0的整数,如果他们相等就会返回一个整数0,如果小于的话,就会返回 一个整数-1,下面是模拟库函数的实现代码#define _CRT_SECURE_NO_WARNINGS 1#inc

2022-07-13 23:43:56 86

原创 练习和模拟实现qsort排序函数

练习使用qsort函数void qsort( void *base,使用qsort首先需要传要排序的地址, size_t num, 待排序的数据元素个数 size_t width,每一个元素的大小,是多少字节的 int (__cdecl *compare )(const void *elem1, const void *elem2 ) ); 最后一个是要参数是 排升序还是降序的函数, 这个函...

2022-06-03 18:19:17 59

原创 打印杨辉三角 猜凶手 猜名次

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#define Num 10//如果想要打印更多的杨辉三角,只需要修改这个数值即可,比较方便//初始化一个二维数组,用二维数组来保存杨辉三角的数值//首先创建一个数组,暂定数组为10*10// 初始化一下数组,我们都知道杨辉三角的腰都为1,// 并且每一行的个数都是以1递增的个数// 最重要的一点就是,杨辉三角的每一个数,刚好等于前一行的前两个数的和// 这是我们这个代码的规律.

2022-05-24 21:52:11 51

原创 C语言扫雷

博主学的还不到家,如有问题,请大家指出,博主会多多学习。首先要创建两个数组,数组的大小最好是比展示出来的数组要大两格,展示出来的数组是比实际的要小两格,这样就可以防止我们判断排查雷的时候不用去做,数组访问是否越界判断,第一个数组用来存放雷的信息,第二个用来打印出来显示给用户看的,通过用户输入的坐标,来判断,如果是雷则游戏失败,如果不是雷,则显示这个坐标周边的雷的数量信息,并展开他周边八个格子,如果不是雷则展开,是雷则不展开,并且雷的上一格和下一格也不展开,保持游戏难度。首先是test.c的主函数

2022-05-08 14:47:23 666

原创 课堂作业完成三字棋,还未能增加电脑难度

//博主是一个刚学不久的,会有一些错误,还请见谅#define _CRT_SECURE_NO_WARNINGS 1#include "game.h" //这里直接声明一个头文件,其他要使用的头文件都放在这个game.h里面void menu(void) { printf("*****************************************\n"); printf("**** 输入1.开始游戏 输入0.退出游戏 ****\n"); printf("***...

2022-05-01 19:19:00 30

原创 自我认知学习成果的第四天

今天学习了动态内存开辟的四个函数,分别是malloc,calloc,realloc,free 分别说明一下,各个函数的功能作用,malloc是向内存申请一个动态内存的空间,申请的格式是malloc(这里填要申请多少个字节,懒的算的可以直接10*sizeof(int)这样申请)申请成功后会返回一个地址,把这个地址给到一个对应类型的指针就行,建议是以这种格式int *p=(int*)malloc(40)这里我创建一个指针p,用malloc开辟一个40字节的动态内存,如果malloc开辟失败会返回一个NULL空指

2022-04-08 10:20:20 32

原创 自我认知学习成果的第三天

今天学习了 struct 结构体的一些规则和使用方法,还有memmove结构体跟数组是不一样的,数组只能用来保存一样类型的,结构体是可以保存不同类型的,

2022-04-03 19:55:44 39

原创 自我认知学习成果的第二天

今天学习了string头文件里面的两个函数,第一个是strcpy,功能是复制一个字符串到另外一个字符串,(要粘贴的字符串地址,要复制的字符串地址)粘贴的对象是从第一个字符串的首元素开始覆盖,复制到字符串的\0停止,注意事项 ,要粘贴的对象要保证字符串的空间足够放的下。第二个函数是strtok,功能是分割字符串,使用方法是(要被分割的字符串地址,"输入符号为分割点"),遇到分割符号就会把那个符号换成\0,并且会记住这个\0的地址,再接着分割的时候只需要传NULL 一个空指针就行,下面举个例子...

2022-03-31 14:28:27 35

原创 自我认知学习成果的第一天

本人是刚开始接触c的学生, 如有错误麻烦提出 我会积极修改, 同时这个文章是给我自己记忆的 ,不喜勿喷 ,今天学习了 string头文件的几个函数 ,了解了使用规则和这些函数实现方式, 首先是strlen这个函数的作用是计算字符串的个数 ,函数是计算到\0停止 并且\0不会计算到个数里面, 创建一个字符串的时候用大括号初始化的话{} 系统是不会自动添加一个\0,所以如果用strlen去计算的话,会得出一个随机值,用""双引号初始化的话 ,系统会自动添加一个\0,这时用strlen去计算字符串个数就是正...

2022-03-30 19:38:17 222

空空如也

空空如也

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

TA关注的人

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