自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 快速排序(个人观看王道考研视频的总结)

算法思想在待排序表L[1…n]中任取一个元素pivot作为枢轴(或基准,通常取首元素),通过一趟排序将待排序表划分为独立的两部分L[1…k-1]和[k+1…n],L[k+1…n]中的所有元素都大于等于pivot,则pivot放在其最终位置L(k)上,这个过程称为一次划分。然后分别递归地对两个子表重复上述过程,直到每个部分内只有一个元素或者空为止,即所有元素都放在了其最终位置上。简易步骤将首元素设为low,最后的元素设为high,选取首元素作为枢轴pivothigh向左移,当碰到小于pivot的值时

2021-07-22 17:08:38 273

原创 实现简易的mv功能(Linux下,基于C++语言)

#include <iostream>#include <fstream>using namespace std;int main(int argc,const char* argv[]){ if(3 != argc) { cout << "User:./mv <src> <dest>" << endl; return 1; } ifstream ifs(argv[1]); if(!ifs.good())

2021-07-20 22:14:15 604

原创 面向对象的四个特性

1、抽象先找出(想象)解决问题的"对象",并分析该对象解决问题所需要的属性(成员变量)和行为(成员函数)。2、封装把抽象出来的结构封装成一个类(结构),并给类的成员变量和成员函数设置相应的访问权限(public,private,protected)3、继承(1) 在封装类前,先考虑现在已有的类是够能够解决一部分问题,如果有则把现有的类继承过来,在此基础上进行扩展,从而缩短能解决问题的时间(2) 面对一个很复杂的问题拆分成若干个小问题,每个问题都设计一个类去解决,最后把这些类通过继承合并成一个能解

2021-07-20 12:27:02 154

原创 指针与引用的区别

相同点:都可以跨函数共享变量、都可以提高函数的传参效率、也都需要const保护不同点:1、引用是一种取别名机制,而指针是一种数据类型2、引用不需要额外的存储空间,而指针需要4/8字节用于存储地址编号3、指针可以不初始化,但引用必须初始化4、指针可以更改指向的目标,但引用不行5、有空指针,但没有空引用6、指针可以配合堆内存使用,但引用不行7、可以定义指针数组,但不能定义引用数组(但可以定义数组指针,也可以定义数组引用,可以定义函数指针,也可以定义函数引用)...

2021-07-20 11:29:04 145

原创 C++知识总结

一、C和C++的不同1、基本数据类型的不同bool、字符串、void*2、复合数据类型的不同结构、联合可以有成员函数,有隐藏的四大成员函数(构造、析构、拷贝构造、赋值),可以管理访问权限3、枚举检查更严格枚举变量不能被整型数据赋值4、类型限定符不同const不会主动读取被保护的值,默认只使用初始化的值,可以定义常函数static修饰符合类型的成员变量和成员函数5、强制类型转换的方式不同(类型)数据xxx_cast <目标类型>(数据)6、堆内存的管理方式不同mallo

2021-07-20 11:21:04 84

原创 树的前、中、后序、层序遍历

层序遍历:1、首先将二叉树的根节点push到队列中,判断队列不为NULL,就输出队头的元素,2、判断节点如果有孩子,就将孩子push到队列中,3、遍历过的节点出队列,4、循环以上操作,直到Tree == NULL。前中后、层序遍历代码:list_queue.h#ifndef LIST_QUEUE_H#define LIST_QUEUE_H#include <stdlib.h>#include <stdbool.h>#define TYPE int// 设

2021-07-19 22:51:01 74

原创 通用链表(Linux内核链表)

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>// Linux内核链表// 遍历#define list_for_each(n,head)\ for(n=head->next;n!=head;n=n->next)// 计算结构体成员所处的结构中的地址编号// type 结构类型 mem 结构成员名#define offset(type,mem) ((int)(&

2021-07-13 09:51:17 134

原创 双向循环链表

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#define TYPE int// 设计双向链表节点typedef struct Node{ struct Node* prev; TYPE data; struct Node* next;}Node;// 创建节点Node* create_node(TYPE data)

2021-07-12 23:27:59 75 1

原创 如何用两个栈模拟一个队列?

首先得思考功能:1、栈1不满,都可入队2、栈1满,栈2空,可入队,前提是数据从栈1入到栈2一个不留3、栈2 不空栈,栈1一定不能到栈2#include <stdio.h>#include <stdlib.h>#inlcude <stdbool.h>#define TYPE int// 设计顺序栈结构typedef struct ArrayStack{ TYPE* ptr; // 存储元素的内存地址 size_t cal; // 栈的容量 si

2021-07-10 17:13:03 312

原创 C++开发环境搭建

新建虚拟机,输入名字,类型选择Linux,版本选择Ubuntu(64-bit),点击下一步内存大小建议1024MB,Qt建议4096MB,点击下一步新建虚拟电脑,选择"现在创建虚拟硬盘",若有现成的虚拟机硬盘可选择"使用已有的虚拟机硬盘文件",点击创建创建虚拟硬盘,选择VDI(VirtualBox 磁盘映像),点击下一步选择固定大小,点击下一步文件位置和大小,文件位置想选哪选哪,大小建议10GB,点击创建可在设置中的系统中的主板中设置内存大小,以及在处理器中设置处理器数量(建议3-4个)Ub.

2021-07-09 12:03:57 88

原创 Linux基础命令(2)

其他相关命令:tar 压缩/解压文件-zcvf 包名 要压缩的目录 创建压缩包-zxvf 包名 解压缩chmod 修改文件权限 chmod mmm m=r(4)+w(2)+x(1) [自己、同组、其它] rwx r-x r-x 755 644 chmod +/-rwx 文件名 所有用户统一修改权限 注意:目录必须要

2021-04-12 13:25:15 64

原创 字符串、输入输出缓冲区

一、字符串:字符:在计算机中,字符是以整数形式存储的,当需要显示时根据ASCII表中的对应关系显示出相应的符号或图案‘\0’ 0‘0’ 48‘A’ 65‘a’ 97串:是一种数据结构,是由一组连续的相同类型的若干个数据组成,末尾有一个结束标志对这种数据结构进行处理都是批量性处理,从开头位置到结束标志为止字符串:由字符组成的串行结构,他的结束标志一定是’\0’二、字符串的输入:scanf %c (接收字符)scanf %s 地址注意:不能接收空格c

2021-04-12 13:22:34 801

原创 C语言重要知识点

text 代码段: 存储的是二进制指令、常量数据,权限是只读,强制修改会产生段错误data 数据段: 存储被初始化过的全局变量、被初始化过的静态局部变量bss 静态数据段:存储未初始化的全局变量、未初始化过的静态局部变量,程序运行时会自动清理为0stack 栈: 局部变量、块变量,会随着程序运行而不断地申请、释放,由系统统一管理,但是小heap 堆: 由程序员手动管理,特点就是大static改变存储位置:改变局部变量的存储位置:由stack栈内存改为data或者

2021-04-12 13:22:03 181

原创 指针、二级指针

一、什么是指针:指针就是一种特殊的数据类型,使用它可以定义指针变量,,指针变量中存储的就是整型数据,代表了内存的编号,通过这个编号,可以访问到对应内存二、为什么要使用指针:1、函数之间是相互独立的,但是有时候需要共享变量函数传参是值传递全局变量容易命名冲突使用数组还需要传递长度命名空间是独立的,但是地址空间是同一个,所以指针可以解决这个问题2、由于函数之间传参是值传递(内存拷贝),对于字节数较多的变量,值传递的效率较低,如果传递变量的地址只需要传递4/8字节3、堆内存无法取名字,它不

2021-04-12 13:21:31 443

原创 循环和数组

一、获取方向键的功能:使用getch.h头文件的getch函数1、在Windows中吧getch.h头文件放入共享文件夹2、终端进入共享文件夹 cd /media/sf_Share(zhizhen)/3、复制头文件到C标准库中 sudo cp getch.h /usr/include/4、加读权限 sudo chmod +r /usr/include/getch.h二、走迷宫:maze.c1、定义二维字符数组作为迷宫'#'墙壁 ’ '路 '@'老鼠2、定义一个变量记录老鼠的位置3、获取

2021-04-12 13:21:00 56

原创 循环的基础知识

循环一、for 循环语句:循环就是让一段代码反复执行,达到你想要的效果for 是一种比较灵活且危险(与其他循环语句相比)的一种循环一般使用一个变量来引导他的运行,这个变量叫做循环变量i,indexfor([1];[2];[3]){ [4];}1、给循环变量赋初值,C99标准可以定义循环变量 -std=gnu99 在此处定义的循环变量,只能在for循环内使用2、判断循环变量的值是否达到边界3、被反复执行的代码,也叫做循环体4、改变循环变量,防止死循环,一般对循环变量进行

2021-04-12 13:20:30 244

原创 头文件与Makefil

一、头文件应该写什么:问题:头文件可能被任意的源文件包含,意味着头文件的内容会在多个目标文件中存在,合并时不能冲突重点(解决):头文件中只能编写声明语句,不能有定义语句全局变量声明函数声明宏常量宏函数 (宏也可以相当于声明)typedef 类型重定义结构、联合、枚举的类型声明二、头文件的编写规则:1、为每个.c文件写一份.h文件(头文件),.h文件是对.c文件的说明2、如果需要用到某个.c文件的变量、函数、宏,只需要把他的头文件导入即可3、.c文件也需要导入自己的.h文件,目的

2021-04-12 13:19:57 88

原创 数组、二维数组、变长数组

一、数组:什么是数组:变量的组合,是一种批量定义变量的方法定义:类型 数组名[数量/下标]int arr[5];使用:数组名[下标/数量];下标:从 0 开始,范围:0 ~ 数量-1遍历(从头到尾走一遍):与for循环配合使用,使用循环变量i作为数组的下标初始化:类型 数组名[数量] = {1,2,3,4,5…};1、数组与普通变量一样默认值是随机的,为了安全起见要对他进行初始化2、这种初始化的方式只能在定义语句中使用,而且只能逐个赋值,不能整体赋值3、初始化的数量过多,编译器会产生警告

2021-04-08 22:19:43 282

原创 类型限定符

一、类型限定符:auto 用于定义自动分配、释放内存的变量(局部变量),不加代表了加注意:全局变量不能用它修饰,不能与static同时使用在C11中 可以自动识别类型extern 声明变量,意思是说明此变量已经在别处定义,请放心使用 但是只能临时通过编译,链接时如果找不到依然还是会报错 不能赋值static 改变存储位置: 改变局部变量的存储位置:由stack栈内存改为data或者bss(由局部变量是否初始化决定)

2021-04-08 22:19:18 159

原创 进制,原反补码,位运算符

一、进制转换:为什么要使用二进制、八进制、十六进制:因为现在的CPU只能识别高低两种电流,只能对二进制数据进行计算二进制数据虽然能够直接被CPU识别计算,但是不方便书写、记录,把二进制转换成八进制是为了方便记录在文档中随着CPU的位数不断发展,由早期8位逐渐发展到现在64位,因此八进制也逐渐不能满足需求了,所以才出现了十六进制十进制转二进制:求余法:用2对数据求余,然后再对商继续求余,直到商为0结束,过程中产生的余数就是该数据的二进制(逆序)(最少描述8位,没8位前面补0)n % 2 =

2021-04-08 22:09:54 81

原创 宏、预处理指令

一、预处理指令:程序员所编写的代码不能被真正的编译器所编译,需要一段程序把代码翻译一下翻译的过程叫做预处理,执行翻译的程序叫做预处理器,被翻译的代码叫做预处理执行指令,以#开头的都是预处理指令查看预处理结果: gcc -E code.c 把预处理的结果直接显示到终端上 (code是文件名,可替换其他) gcc -E code.c -o code.i 把预处理的结果存储到.i结尾的文件中预处理指令的分类 #include 包含文件 #include

2021-04-08 22:09:33 281 2

原创 函数、进程映像、局部与全局变量

一、函数:一段具有某项功能的代码,是C语言中管理代码的最小单位把代码封装成一个个函数,可以方便代码的管理和调用代码函数的分类: 标准库函数: C语言标准委员会为C语言以函数形式提供的一些基础的功能,封装在libc.so库中, 使用时需要包含具体的头文件,函数名(参数)就可以调用了 int isalnum(int c); 功能:当c转换成字符后是数字、字母字符时,返回非零值,否则返回0 int isal

2021-04-08 22:07:43 108

原创 堆内存与二维数组、函数递归

一、堆内存定义二维数组:指针数组:类型* arr[n];//指针数组int* arr[10] = {};for(int i= 0;i<10;i++){arr[i] = malloc(sizeof(类型)*m);//m个,容易产生内存碎片}注意:每一行的m可以不同,这就可以形成不规则的二维数组数组指针: 类型 (*arrp)[列数] = malloc(sizeof(类型)*行数*列数); //对内存数组要求高 注意:所谓的多维数组都是用一维数组来模拟的二、

2021-04-08 22:07:10 167

原创 堆内存

一、什么是堆内存:是进程的一个内存段(text\data\bss\heap\stack),是由程序员手动管理的特点:足够大 缺点:使用麻烦二、为什么要使用堆内存:1、随着程序的复杂,数据只会越来越多2、其他内存段的申请释放不受控制,堆内存的申请释放是受控制的三、如何使用堆内存:注意:C语言中没有控制堆内存的语句,只能使用C标准库提供的函数#include <stdlib.h>void *malloc(size_t size);功能:从堆内存中申请size个字节的内存,申

2021-04-08 22:06:26 723

原创 Makefile

CC=gccBIN=bookSTD=-std=gnu99FLAG=-Wall -WerrorLIB=-lmINCLUDE=-I.OBJ=main.o phone_book.o tools.oall:$(OBJ)$(CC) -o $(BIN) $(OBJ) $(LIB)%.o:%.c$(CC) $(STD) $(FLAG) -c $< -o $@ $(INCLUDE)clean:rm -rf $(BIN) $(OBJ)

2021-04-08 22:05:53 42

原创 C语言基础知识

C语言简介:BCPL->newB->C->UNIX->Minix->Linux->gccC语言诞生于1970~1973年,在肯.汤普逊和丹尼斯.里奇的领导下编写完成的,归属于美国的贝尔实验室。C语言是专门编写操作系统的语言,所以天生适合对硬件编程,也以速度快著称,也非常适合实现数据结构与算法。由于出现时间早,有很多缺陷,也没想到普通人也会使用C语言编程,以此存在很多的缺陷、陷阱,但是前辈们总结了一些避免的经验《C语言陷阱与缺陷》C语言的语法很自由,但是也意味着危

2021-04-08 22:05:20 108

原创 C语言关键字

数据类型相关:内建类型:void,char,short,int,long,float,double 7个自建类型:struct,union,enum,sizeof 4个类型限定符:auto,const(恒定不变),static(静态的),volatile(定义变量,相当于告诉编译器,这个变量的值会随时发生变化,易变的、不稳定的),register(做声明的,代表寄存器存储的类型),extern(放在变量或者函数前,以表示变量或函数的定义

2021-04-08 22:00:00 30

原创 Linux基础命令(1)

陈奕锋 13588014238学习工具、网站:分享代码的平台:GitHub、码云总结知识点平台:CSDN、博客园笔试面试题:牛客网、力扣、PAT(乙级)问答网站:思否、知乎训练抖音、今日头条思维导图: xmind 总结归纳知识点Makedown:typora文本编辑器:VScode开发环境:VirtualBox 虚拟机工具 免费开源Ubuntu 12.04 LTSvim 代码编辑器gcc 编译器Linux系统介绍BCPL->newB->C->Unix-

2021-04-06 22:03:14 67

空空如也

空空如也

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

TA关注的人

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