自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 并发-线程

线程(thread)也是的一种形式,线程是比进程更小的活动单位,一个进程中可以有多个线程,线程是进程内部的一个执行分支。一个进程刚开始时只有一个线程(),后续的代码中可以创建新的线程,可以指定新线程去执行某个函数,这个函数称之为线程函数。进程内部的多个线程共享该进程内部的所有数据,所以线程间通信相比进程简便很多,如:直接使用全局变量就行。

2024-10-17 22:45:12 1040

原创 并发-进程间通信

通过映射的方式,让多个进程共享同一块内存,这块是多个进程共享的,A进程往里面写入数据,B进程就能获取这些数据,B进程往里面写入数据,A进程也能获取这些数据,这样就可以实现进程间通信;具体怎么做的呢?先在内核中开辟一块内存,然后让多个进程通过映射方式把这块内存映射到自己的进程地址空间。和管道相比相同点:两者都是通过内核实现通信,管道的内容也是存在内核中。不同点:管道每次通信都需要直接操作内核(由用户态转换到内核态才能操作内核),效率相对共享内存较低。

2024-10-15 15:40:14 729

原创 并发-进程

进程(Process)和程序(Program)是两个相关但不同的概念。程序一般以或的形式存储在磁盘中,是一组指令的集合,用于描述计算机执行特定任务的步骤和逻辑,它是a.out (也可以是其他名字) 这就是linux下的程序。当执行 ./a.out 命令时,就会(程序执行时都会把程序中的指令加载到内存)并该程序,这个过程就是创建进程并执行,进程是,具有独立的内存空间、执行状态。

2024-10-12 11:45:00 859

原创 C语言-文件IO-触摸板

触摸屏是输入设备,对应的设备文件 /dev/input/event0,当手指点击/滑动屏幕时,会触发输入事件,而底层会把输入事件的信息保存到这个文件中,实时保存(不是累计保存),我们只需要从该文件中读取这些信息并分析处理即可。//value的含义是不固定的,根据 code的不同而不同。当 type为 EV_KEY 时,code表示对应按键的键值。//含义不固定的,根据 type的不同而不同。当 code表示x轴的时候,value表示x轴的坐标。当 code表示y轴的时候,value表示y轴的坐标。

2024-10-11 09:45:00 961

原创 C语言-文件IO-显示屏

linux中有一中文件,叫做字符设备文件,每个字符设备(什么是字符设备,4阶段学驱动时会讲)都有一个对应的字符设备文件(Everything is a file ,in linux), Frame Buffer是一个标准的字符设备,对应的文件为 /dev/fb0 (device :设备,所有的设备文件都存在 /dev目录下, fb0: Frame Buffer).,不同的二进制文件中的内容含义是不一样的,如:图片文件中存储了颜色信息,音频文件中存储了声音信息,a.out存储了机器指令 ……

2024-10-10 11:45:00 1169

原创 C语言-文件IO

linux操作系统把对文件的操作封装成了多个函数,统称为linux系统IO。文件描述符(File descirptor) 是一个用来访问文件的抽象化概念文件描述符是一个正整数(进程文件表项下标),一个被打开的文件对应着一个文件描述符linux中,每个进程(暂时理解程序)都会自动打开3个文件:功能 文件描述符 对应的宏。

2024-10-08 22:42:09 1515

原创 C语言-结构体

/ 变量lisa 里面包含了一个char []类型的name, int类型的ID, char类型的gender, float类型的score, ...以int类型占4个字节作为倍数(单元长度), 因为a占用了一个字节, 剩余的3个字节 后面的成员b是存不下的。32位操作系统下, 最大是按照4字节对齐的, 意思就是 哪怕是结构体中最大的成员的长度超过了4个字节。64位操作系统下 2*8 --> 16。"成员类型1,2,...n" : C语言合法的数据类型都可以(基本类型,指针类型,构造类型)

2024-09-30 11:15:00 696

原创 C语言-c语言组成

/ i++>5?main()函数是程序的入口, 程序从这里开始执行, main函数结束了, 那么整个程序就结束了。#include <> 从系统标准的头文件路径下进行搜索 (如: /usr/include/ )#include <> 从系统标准的头文件路径下进行搜索 (如: /usr/include/ )#include "" 先从当前的工程路径下进行搜索, 再从系统标准的头文件路径下进行搜索。#include "" 先从当前的工程路径下进行搜索, 再从系统标准的头文件路径下进行搜索。

2024-09-29 18:38:52 1310

原创 C语言-指针

(a[1]+2) --> *( &a[1][0] + 2 ) --> *( &a[1][2] ) --> a[1][2] 数组第二行第三列的那个元素。a[1]+2 --> &a[1][0]+2 --> &a[1][2] 数组第二行第三列的那个元素的地址。//假设b[0][0]的地址为0x0000。//*p = 20;且数组元素的地址是连续的, a[0]的下一个是a[1], a[1]的下一个是a[2], ...

2024-09-28 12:09:37 1742

原创 C语言-函数

a[0] < a[1] && a[1] < a[2] && a[2] < a[3] && .... && a[n-2] < a[n-1] n个元素。// sum(4,6) ==> 10 "函数调用表达式" --> 该表达式的值就该函数的返回值。//表示函数结束,带有一个返回值,这个返回值就是表达式的值。// OK 16 // 先会计算出实参的值, 再将实参的值 传递给 形参。a[0] < a[1] && a[1] < a[2] && a[2] < a[3] 4个元素。

2024-09-27 09:42:48 791

原创 C语言-数组

O(1) < O(log n) < O(n) < O(n * log n) < O(n^2) < O(n^3) < ... (注:此处log都是以2为底)if( a[i][j]比上面的数大 && a[i][j]比下面的数大 && a[i][j]比左面的数大 && a[i][j]比右面的数大 )//输入: abcd回车 ---> ch[0] -- 'a', ch[1] -- 'b', ...if( a[i][j]!

2024-09-26 12:45:00 528

原创 C语言-循环结构

(n/2 + 1) + (n/2 + 2 ) --> n+3 明显超过了n的 --> 遍历范围 [1, n/2]从第二次循环开始,就不会再去执行"表达式1"了, 直接再去判断"表达式2"的值, ....如果"表达式2"的值为真(非0), 那么就执行语句, 再去执行"表达式3", 一次循环完毕;如果表达式的值为真(非0), 那么就继续执行该"语句", 执行完之后, 再去判断表达式 ...1) 求表达式 Sn = a + aa + aaa + ... + aa....aaaaa(n个a)的值。

2024-09-25 10:45:00 1024

原创 c语言-分支结构

功能:用来格式化输入,按照format字符串指定的格式从键盘(标准的输入流stdin中)获取输入。比如: a+b, 3+4, 20, a==1, a=1, ....2,3,4,5,6,7,8,9,10,11,12 - 15 (平年和闰年)(2)普通字符(非转义字符,除去空白符和%以外的字符)指一行输入任意数量的空白符(可以是0个)(3)转义字符(以%开头非字符), 有特殊含义。%d --> 有符号的32位整数形式(十进制)(2)转义字符(以%或者\开头的字符),有特殊的含义。

2024-09-24 09:45:00 811

原创 C语言-运算符与表达式

1 11111111 11111111 11111111 11111111 -1在内存中的存放形式。--> long long (8个字节) --> float --> double --> long double (16个字节)++/-- 前置返回的是i本身的值, 后置返回的是缓冲区的值(临时对象的值)结论: 只有两个bit为都为1时,结果才为1,否则就为0 "有0则0,全1为1"结论: 只有当两个bit位都为0时,结果才为0,否则就为1 "有1则1,全0为0"

2024-09-23 11:15:00 1230

原创 c语言-数据类型

b --> 00000000 00000000 00000000 00001001 --> 9的原码,也是9的补码。... // 百度百科 https://baike.baidu.com/item/c%E8%AF%AD%E8%A8%80/105958?小数部分 1000 00000000 00000000 --> 1 * 2^(-1) --> 0.5。负整数的补码 --> -1 --> 取反 --> 绝对值的原码 --> 得到负数。

2024-09-22 11:15:00 1028

原创 linux基础-正则表达式

以正则表达式去找: "([0-9]{1,3})\\.[0-9]{1,3}\\.([0-9]{1,3})\\.([0-9]{1,3})"find ./ -regex ".*\.c" 找所有以.c结尾的文件。regerror: 把 regcomp/regexec 运行返回的错误码,转换成相应的错误。匹配的结果用 regmatch_t 来描述,返回的是再木船中匹配到的模式对象。总共有多少个模式需要匹配,则需要有多少个结构体regmatch_t。一个模式需要对应一个regmatch_t类型的结构体变量!

2024-09-21 10:43:16 627

原创 linux基础-shell脚本

L filename 测试filename否是为一个符号链接文件(软链接Link)-f filename 测试filename否是为一个普通文件(file)>> 追加,把输出的内容添加到filename指定的文件的下一行。-d filename 测试filename否是为一个目录文件(dir)file1 -ot file2 测试file1是否比file2更旧。-x filename 测试filename是否存在 并且可执行。file1 -nt file2 测试file1是否比file2更新。

2024-09-20 11:00:00 1074

原创 linux基础-linux基本命令

给文件1.txt的其他用户(other)和组用户(group)加上一个可读的权限(r)把filelist指定的文件列表中的文件 用(-j bzip2)bzip2。给文件1.txt的所有用户(u,g,o)加上一个可执行的权限(x)把filelist指定的文件列表中的文件 用(-z gzip)gzip。给文件1.txt的组用户(group)减去一个可写的权限(w)给文件1.txt的用户(user)加上一个可执行的权限(x)如: ../2.c 表示当前目录的上一级目录下面的2.c的那个文件。

2024-09-19 10:00:00 533

原创 数据结构-图

R = { <vi,vj> | vi,vj都属于集合V,且vi和vj之间存在路径的 0<= i,j <= n-1}其中 V = { Vi | Vi属于图中的数据元素(i=0,1,2,3,...n-1),顶点的集合,当n=0时,V是空集}path[i] --> 存放 源点v 到 顶点i 的最短路径(v -> ... -> vi )2)dist[m] = MIN( dist[i] | i=0,1,2,... 且S[i] == 0 )去访问v的邻接点,v的邻接点v1,v2,v3,...vn。

2024-09-18 10:00:00 925

原创 数据结构-树和二叉树

/指针域 , 左子节点的指针。父节点的编号为 2^(k-2) + ( i - 2^(k-1) )/2 ==> i/2。左子节点的编号为 2^k + 2*( i - 2^(k-1) ) ==> 2*i。(2)节点的带权路径长度规定 从根节点 到 该节点之间的路径长度 与 该节点上的权值 的乘积。(3)对于任意一颗二叉树中, 如果其 叶子节点(度为0的节点)的个数为 n0, 度为2的节点的个数为 n2,typedef struct AVLNode //平衡的二叉排序树的节点的数据类型。

2024-09-17 10:00:00 1072

原创 数据结构-队列

/指针域 --> 保存逻辑上的关系(下一个)//数据域 --> 存储数据。typedef struct node //数据元素的类型。//数据元素中 数据的类型。//保存队列中元素的个数。//保存队首元素的下标。//保存队尾元素的下标。typedef struct LinkQueue //链式队列。#define MAX_LEN 10 //队列的最大的容量。//指向队首元素 first。//保存队列的数据元素的个数。//指向队尾元素 last。

2024-09-16 10:30:00 1391

原创 数据结构-栈

/指针实现 : data = (ElemType *)malloc( sizeof(ElemType) * MAX_LEN );//数组实现 : ElemType data[MAX_LEN];//data指向一块地址连续的空间,来存储栈的每一个元素。//指针域 --> 保存逻辑上的下一个。//top == -1 表示栈中没有元素, 空栈。就是我们平时所用的标准四则运算表达式, 比如 9+3-2*(1+4)-4/2。#define MAX_LEN 20 //栈的最大的容量。

2024-09-15 11:30:00 1793

原创 数据结构-循环链表

/指针域 --> 保存逻辑上的关系(下一个)//保存逻辑上的上一个。//指针域 --> 保存逻辑上的下一个。//数据域 --> 存储数据。//数据域 --> 存储数据。//指向链表的最后一个节点。//指向链表的第一个节点。typedef struct node //数据元素的类型。//数据元素中数据的类型。//指向链表的最后一个节点(tail)//指向链表的第一个节点(head)//数据元素中 数据的类型。//记录链表中元素的个数。//保存链表的数据元素的个数。

2024-09-14 18:00:00 781

原创 数据结构-双向链表

注意: 删除中间节点时, 先去修复前后的关系, 再去断开自身的连接。3)根据用户输入的数据, 创建一个有序的带头结点的双向链表 (升序), 将新链表返回。5)在双向链表中找到值为x的节点, 将所有值为x的节点的值 修改成a。2)根据用户输入的数据的顺序, 逆序创建一个带头结点的双向链表。1)根据用户输入的数据的顺序, 创建一个带头结点的双向链表。

2024-09-13 16:31:08 746

原创 数据结构-带头结点的链表

typedef struct node //数据元素的类型。//指向链表的最后一个节点(tail)//指向链表的第一个节点(head)//数据元素中 数据的类型。"两两比较, 取较小的那个" (摘下较小的那个节点,插入到C)//保存链表的数据元素的个数。5)在链表中查找值为x的节点, 将所有值为x的节点的值 修改成a。2)根据用户输入的数据的顺序, 逆序创建一个带头结点的单链表。1)根据用户输入的数据的顺序, 创建一个带头结点的单链表。//创建已给带头结点的单链表。

2024-09-13 07:00:00 1029

原创 数据结构-单链表

/用上述自定义的链式结构的数据元素类型, 存储线性表(1,3,5,7,9), 并依次打印输出//数据元素中 数据的类型typedef struct node //数据元素的类型//数据域 --> 存储数据//指针域 --> 保存逻辑上的关系(下一个)}Node;b.data = 3;c.data = 5;d.data = 7;e.data = 9;

2024-09-12 22:01:54 771

原创 常见算法—基本、二分、插值、和斐波那契查找

3.二分查找的过程:>min和max表示当前要查找的范围 >mid是在min和max中间的 >如果要查找的元素在mid的左边,缩小范围时,min不变,max等于mid减1> 如果要查找的元素在mid的右边,缩小范围时,max不变,min等于mid加1。如果数据是乱的,先排序再用二分查找得到的索引没有实际意义,只能确定当前数字在数组中是否存在,因为排序后数字的位置就可能发生变化了。插值:mid尽可能的靠近要查找的数据,但是要求数据尽可能的分布均匀。相同点:都是通过不断的缩小范围来查找对应的数据。

2023-11-18 21:37:25 63

空空如也

空空如也

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

TA关注的人

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