自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux--信号小程序

信号信号源来自:键盘,操作系统,硬件,kill pid等。查看系统信号:kill -l信号处理:方式1:缺省处理,就是按照原本操作系统默认的方式处理方式2:忽略处理,但是SIGKILL 和SIGSTOP不可忽略。方式3:自己处理,但是SIGKILL 和SIGSTOP不可自行处理。信号函数:#include <signal.h>typedef void (*sighandler_t)(int); //宏定义sighandler_t指针,指向一个返回值void参数int

2020-05-29 14:06:20 146

原创 Linux--动态库手动链接

动态库手动链接使用dlopen可以在程序指定位置调用指定函数。打开一个库文件:返回值时一个句柄参数一指定库文件名,参数二指定方式,RTLD_LAZY用到的时候打开,RTLD_NOW立即打开void *dlopen(const char *filename, int flag);指定使用那一个函数:参数一是dlopen的返回值。参数二是函数名,返回函数的地址。void *dlsym(void *handle, const char *symbol);关闭打开的文件句柄:int d

2020-05-29 13:11:41 873

原创 Linux--创建使用动态库流程

动态库Linux下动态库文件的文件名形如 libxxx.so,其中so是 Shared Object 的缩写,即可以共享的目标文件。在链接动态库生成可执行文件时,并不会把动态库的代码复制到执行文件中,而是在执行文件中记录对动态库的引用。程序执行时,再去加载动态库文件。如果动态库已经加载,则不必重复加载,从而能节省内存空间。使用动态库分为三步:假设我们已经有了头文件groable.h,加法函数add.c,减法函数sub.c首先生成.o文件:gcc -c add.c -I. //-I.代表在当

2020-05-29 12:32:06 235

原创 Linux--用stat函数实现ls -l功能

stat函数函数常用的定义: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *path, struct stat *buf);第一个参数是文件名,第二个参数是stat的结构体,用来存放stat取出来的元数据stat结构体内容如下:struct stat { dev_t st_dev; /* I

2020-05-29 11:11:16 895

原创 Linux--打开目录,读取目录函数操作

打开目录函数打开目录使用的函数:#include <sys/types.h>#include <dirent.h>)//头文件如上DIR *opendir(const char *name); //打开函数int readdir(unsigned int fd, struct old_linux_dirent *dirp,unsigned int count); //读取函数dirent的结构体内容如下: struct old_linux_dirent {

2020-05-28 18:30:25 927

原创 Linux--文件锁fcntl的使用

文件锁fcntl的使用fcntl函数主要用于锁文件。函数原型:第一个参数fd就是文件描述符。第二个参数是锁的命令,有三种分别是(F_GETLK获得锁, F_SETLK非阻塞方式设置锁, F_SETLKW阻塞方式设置锁)如果以第三种阻塞方式设置锁,则参数要加上flock结构体地址struct flock 结构体如下:结构体第一个参数l_type就是锁的状态,是写锁,读锁,还是不锁。第二个whence参数表示从哪里开始锁,一般是SEEK_SET位置。第三个l_start从开始位置

2020-05-28 16:34:47 358

原创 C++引用,auto关键字,内联函数,范围for循环知识总结

引用引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。1.格式:int a = 10;int& ai = a; //定义引用类型注意:引用类型必须和引用实体是同种类型的2.引用的特征:.引用在定义时必须初始化(即这个别名指的谁).一个变量可以有多个引用(就像一个人可以有多个别名).引用一旦引用一个实体,再不能引用其他实体 (就是一个别名最多只能指一个人)3.常引用:对于const类型,引用也必须加上

2020-05-25 17:19:08 308

原创 C++命名空间,缺省函数,函数重载知识总结

命名空间使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染 。命名空间定义:namespace name //name就是命名空间的名字{ int i = 10; int j = 20; int add(int a, int b){ //也可以定义函数; return a + b; }}补充1.命名空间可以嵌套;补充2.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中 。命名空间的三种使用方法:1.加命名空间名称及

2020-05-25 16:31:44 192

原创 Linux--自制shell

自制shell#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<unistd.h>#include<sys/wait.h>#define ERR_EXIT(msg)\ do{ printf("[%s][%d] %s:%s\n", __FILE__, __LINE__, msg, strerror(errno)

2020-05-15 13:54:28 291

原创 排序知识总结

总结只有选择排序,堆排序,归并排序对数据不敏感,其余排序均敏感

2020-05-15 13:43:51 103

原创 排序--非比较排序之 计数排序

计数排序时间复杂度:O(max(n,范围))空间复杂度:O(范围)稳定:一般教材认为是稳定的数据敏感:不敏感计数排序: 只适合小范围数据, 如果范围大,空间复杂度较高void countSort(int* array, int n){ // 1, 2, 3, 1000000 //统计范围 int min = array[0], max = array[0]; for (int i = 1; i < n; ++i) { if (array[i] > max)

2020-05-11 17:22:40 146

原创 排序--归并排序

归并排序时间复杂度:O(nlogn)空间复杂度:O(n)稳定:稳定数据敏感:不敏感#include<stdio.h>#include<string.h>#include<stdlib.h>//升序//递归void merge(int* array, int begin, int mid, int end, int* tmp) { int begin1 = begin; int end1 = mid; //分成两个子区间 int begin2

2020-05-11 17:20:52 80

原创 排序--快速排序(前后指针法)

快速排序(前后指针法)时间复杂度:最坏:O(n^2)–>不会出现 最好:O(nlogn) 平均:O(nlogn)空间复杂度:O(logn) 函数调用栈, 极端情况: O(n)–>不会出现稳定性:不稳定数据敏感:敏感#include<stdio.h>//升序void Swap(int* array, int i, int j){ int tmp = array[i]; array[i] = array[j]; array[j] = tmp;}//三

2020-05-11 17:11:16 661

原创 排序--快速排序(挖坑法)

快排(挖坑法)时间复杂度:最坏:O(n^2)–>不会出现 最好:O(nlogn) 平均:O(nlogn)空间复杂度:O(logn) 函数调用栈, 极端情况: O(n)–>不会出现稳定性:不稳定数据敏感:敏感#include<stdio.h>void Swap(int* array, int i, int j){ int tmp = array[i]; array[i] = array[j]; array[j] = tmp;}//三数取中//这么做

2020-05-11 17:07:57 408

原创 数据结构--二叉树的基本操作实现(链式)

二叉树功能包括:// 通过前序遍历的数组,例如:"ABD##E#H##CF##G##"构建二叉树// 二叉树销毁// 二叉树节点个数// 二叉树叶子节点个数// 二叉树第k层节点个数// 二叉树查找值为x的节点// 二叉树前序遍历// 二叉树中序遍历// 二叉树后序遍历// 层序遍历//判断是否为完全二叉树注意:调用的栈跟队列没写出来,但是注意要把它们的typedef的元...

2020-05-08 14:08:28 675

原创 排序--快速排序(hora划分)

快速排序#include<stdio.h>//快速排序,升序void Swap(int* array, int i, int j){ int tmp = array[i]; array[i] = array[j]; array[j] = tmp;}int partion(int* array, int begin, int end){ //选择基准值 int k...

2020-05-06 18:19:45 132

原创 排序--冒泡排序

冒泡排序时间复杂度:最坏O(n^2) 平均O(n^2) 最好O(n)空间复杂度:O(1)稳定性:稳定数据敏感:敏感#include<stdio.h>//升序void bubbleSort(int* arr,int size) { for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size ...

2020-05-06 18:11:13 129

原创 排序--选择排序

选择排序时间复杂度:最坏O(n^2) 平均O(n^2) 最好O(n^2)空间复杂度:O(1)稳定性:稳定数据敏感:不敏感#include<stdio.h>//升序void selectSort(int* arr,int size) { for (int i = 0; i < size - 1; i++) { //start表示未排序的最左边元素位置 in...

2020-05-06 18:10:04 123

原创 排序--希尔排序

希尔排序时间复杂度:最坏O(n^1.3) 平均O(n^1.3) 最好O(n)空间复杂度:O(1)稳定性:不稳定 —> 分组时相同值的元素不一定可以分到同一组,预排序是可能导致相对位置发生变化数据敏感:敏感#include<stdio.h>//升序void shellSort(int* arr, int size) { int gap = size; whil...

2020-05-06 18:07:05 133

空空如也

空空如也

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

TA关注的人

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