自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

左子树 右子树 根 HEGBDFICA。左子树 根 右子树 HEBGAFDCI。在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子节点都在同一层上,这。根 左子树 右子树 ABEHGCFDI。从上至下,从左至右,逐层遍历 ABCEGFIHD。------>还原二叉树。------>还原二叉树。样的二叉树称为满二叉树。在满二叉树的基础上,

2024-09-09 20:00:37 887

原创 数据结构 --- 哈希表

哈希表(Hash Table),也叫散列表,是一种根据关键码值(Key value)而直接进行访问的数据结构。

2024-09-09 19:34:51 624

原创 数据结构

程序的设计:将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中,并在此基础上实现某个特定的功能的操作;在记录的存储位置和它的关键字之间建立一种去特定的对应关系,使得每个关键字key对应一个存储位置;二叉树:任意一个节点的子节点个数不能超过2个(树的度为2),且子节点的位置不可更改。查找时,根据同样的散列函数计算记录的散列地址,并按此散列地址访问记录。满二叉树:在不增加树的层数的前提下,无法再增加一个节点的二叉树。线性结构:元素之间一对一的关系(表(数组,链表),队列。

2024-09-04 21:10:47 546

原创 单向链表

8、快慢指针查找倒数第k个链表。

2024-09-04 21:00:29 149

原创 数据库文件(嵌入式)

select * from 表名 where 列名 like “ % 查找内容”;select * from 表名 where 列 关系运算符 值;select * from 表名 order by 列名 DESC。create table 表名(列名1 数据类型,列名2 数据类型,列名3 数据类型);insert into 表名 values(值1,值2,值3);select 列名1,列名2 from 表名;

2024-08-29 21:13:17 1344

原创 IO多路复用

int FD_ISSET(int fd, fd_set *set):判断文件描述符fd是否仍在文件描述符集合中。void FD_CLR(int fd, fd_set *set):将fd从文件描述符集合中清除。void FD_SET(int fd, fd_set *set):将fd加入文件描述符集合中。EPOLL_CTL_ADD: 向集合中添加文件描述符。4.poll只能工作在水平触发模式(低速模式)无法工作在边沿触发模式(高速模式)void FD_ZERO(fd_set *set):文件描述符集合清0。

2024-08-28 21:52:45 368

原创 TCP并发服务器优缺点

2024-08-27 21:08:50 175

原创 网络间通信

const struct sockaddr *dest_addr, //表示 要发送到的 地址 (网络地址 ip+端口号 )socklen_t addrlen //表示dest_addr 这个参数的长度。int flags, // 0 默认的接收方式 --- 阻塞方式。ssize_t sendto( int sockfd, //用于通信的socket对应的fd。struct sockaddr *src_addr, //用来保存发送方的地址信息。addr 远程目标主机的地址信息。

2024-08-22 20:20:34 319

原创 共享内存、网络通信

物理层面数据的传输 --- 一位一位二进制数据 //比特流。用于解决 网络 与 网络之间 数据传输 //数据包。传输控制层,控制传输过程,保证数据完整和可靠。规定了 传输数据的格式 和 方式 //加密。规定了物理层面的电气特性及相关机械特性。规定了 传输数据的格式 //帧数据。就是直接获取要收发的数据。//控制传输过程可靠。3. 网络层 (网际层)1、共享内存(同一主机间通信)osi 7 层参考模型。tcp/ip 五层模型。(1) 产生key值。

2024-08-21 19:31:39 677

原创 信号量与管道通信

注意:sem 申请资源后会自动执行 sem = sem - 1;如果sem没有资源(==0),则线程阻塞等待,一旦有资源。表示进程间使用信号量。如果sem有资源(==1),则申请该资源,程序继续运行。如果此时有任务,在等待这个资源,这个资源直接给对应的任务。可以读管道,但是管道中如果没有数据了,此时读操作 不阻塞。可以读管道,但是管道中如果没有数据了,此时读操作 阻塞。并默认执行,sem = sem+1;

2024-08-16 20:07:40 621

原创 线程锁(2)

带来资源竞争 //专门的技术 解决资源竞争 --- 互斥 同步。进程间共享数据不方便 //进程间通信 (管道,信号,共享内存)//解锁 临界资源访问之后就解开。加锁 //加锁 加在 要访问临界资源的地方。@retval --- 用来保存,退出状态值,所在空间的地址。定义互斥锁 ==》初始化锁 ==》加锁 ==》解锁 ==》销毁。thread //表示要发送的线程的tid号。@thread --- 线程tid。

2024-08-15 20:12:29 279

原创 多线程(1)

宏定义:WIFEXITED() WEXITSTATUS()注意:waitpid 想要处理到子进程必须套在循环中。(3)pthread_join函数:等待线程结束。调用进程 一般不做额外的事情。调用进程 逻辑一般不受影响。(2)获取线程的tid。

2024-08-14 19:17:53 915

原创 多进程多线程

【代码】多进程多线程。

2024-08-13 20:16:57 199

原创 多任务编程

1、进程:pcb + txt / bss / data / 栈堆。进程 --- 程序的一次执行的过程。进行中的程序 --- 已在运行中的程序。进度 —— 动态 —— 内存。程序 —— 静态 —— 硬盘。3、man指令 ps查询。进程是程序的一个实例。

2024-08-12 20:32:02 232

原创 文件属性获取

6、perror、error、strerror :指出错误。4、symlink link 软链接、硬链接。5、truncate:扩大缩小空间,清零。1、getpwuid函数。2、getgruid函数。

2024-08-08 19:55:44 184

原创 目录读写函数

改变目录,创建文件。:获得文件的具体信息。

2024-08-07 19:53:07 703

原创 标准、文件IO

原型: `int open(const char *pathname, int flags, mode_t mode);- 原型: 'int open(const char *pathname, int flags, mode_t mode);功能:将stream流文件中的文件指针从whence位置开始偏移offset字节的长度。功能:获取当前文件流指针的具体位置,一般以文件开头到当前指针的字节数为返回值。的当前末尾位置,则会自动以'\0'来填充文件内容,从。而形成一种被称为"空洞文件" 的特殊文件。

2024-08-06 20:16:45 324

原创 标准IO C库

标准 I/O 函数提供了一种方便、统一和可移植的方式来处理输入和输出。例如,在 C 语言中,常用的标准 I/O 函数包括。标准 I/O 是在 C 语言和许多其他编程语言中用于执行输入和输出操作的一组函数和机制。)通常指将数据输出到屏幕,标准错误()通常指从键盘获取数据,标准输出(用于从输入流中读取一行文本,用于向输出流写入一行文本等。fopen:打开文件。)用于输出错误信息。

2024-08-05 20:12:49 319

原创 shell脚本编写

(2)$#:个数 $?:上个命令是否成功(0成功,1失败) $$:进程ID。1、shell脚本编写:vim xx.sh (开头需写 #!/ bin / bash)输出:“ ” 变量 ‘ ’ 全为常量。chmod +所需权限 xx.sh。(3)输入:read a。(1)环境变量 env。

2024-08-03 18:33:42 186

原创 链表、运算符

声明新的类型名来代替已有类型名。

2024-08-02 20:26:16 349

原创 结构体和链表

int id;通过struct关键字来声明结构体变量结构体变量的操作访问结构体成员使用运算符,如student.id。结构体变量可以通过点运算符直接访问,也可以通过指针访问,使用箭头运算符(->

2024-08-01 19:12:54 1073

原创 指针数组和指向指针的指针

int(*p)(int,int):表示定义一个指向函数的指针变量p,而不是固定的指向哪一个函数,而只是定义了这样一个类型的变量。在 C 语言中,可以定义一个指针变量来指向函数。通过这种方式,可以使用函数指针变量来调用函数,实现动态地选择要执行的函数。指针数组的每个元素都可以指向不同的内存地址或数据。函数可以接受两个参数,其中第二个参数是一个指向指针的指针,通常用于处理命令行参数。指向指针的指针是一种多级指针,它指向的是另一个指针变量的地址。在运行程序时,可以在命令行中输入多个参数,这些参数将被存储在。

2024-07-31 19:31:24 806

原创 字符串与指针

2、字符串被称为匿名数组。指针变量所指向的为字符串常量时,不加const时,也不能被修改。因为字符串常量在字符串常量区,本身就只能读不能写。1、const int *p:指针前可加const修饰,表示无法通过该指针修改指针变量所指向的变量。3、万能指针void *p:可以接收任何类型的指针。int *const p:表示指针变量不能被修改。malloc 和 free 须配对,用完就释放。

2024-07-30 20:32:33 233

原创 指针的概念

指针是一种数据类型,它用于存储变量的地址。通过指针,可以间接访问变量的值。

2024-07-29 18:19:29 395

原创 局部变量和全局变量

一般情况下,变量的值是存放在内存中的,当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到运算器中,经过运算器进行运算,如果需要存数,再从运算器将数据送到内存存放。在编译和连接时,系统会由此知道 Num是一个已在别处定义的外部变量,并将在另一文件中定义的外部变量的作用域扩展到本文件,在本文件中可以合法地引用外部变量Num。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。

2024-07-27 20:18:14 490

原创 数组作为函数参数

(3)在被调用函数中声明了形参数组的大小,但在实际上,指定其大小是不起任何作用的,因为C语言编译对形参数组大小不做检查,只是将实参数组的首元素的地址传给形参数组。因此,形参数组名获得了实参数组的首元素的地址,数组名代表数组的首元素的地址,因此,形参数组首元素和实参数组首元素具有同一地址,它们共占同一存储单元指的是同一单元。由于实参可以是表达式,而数组元素可以是表达式的组成部分,因此数组元素当然可以作函数实参,与用变量作实参一样,是单向传递,即“值传送”方式。1、数组元素作函数实参。2、数组名作函数参数。

2024-07-26 19:27:48 272

原创 函数的调用

4、栈区是计算机内存的一部分,主要用于存放函数的局部变量、函数参数和返回地址等信息。在程序执行过程中,每当一个函数被调用,相关的变量和状态信息就会被压入栈中;堆区的内存管理由程序员负责,需要手动释放,由于其动态特性,堆区的内存分配和释放可能会比较频繁。这个区域通常是只读的,以防止程序在运行时修改自己的指令。函数出现在一个表达式中,这种表达称为函数表达式,这是要求函数带回一个确定的值以参加表达式的运算。1、在调用一个函数的过程中又直接或间接的调用该函数本身,称为函数的递归调用。把函数调用作为 一个语句。

2024-07-25 19:41:11 437

原创 二维数组和函数

(4)如果对全部元素赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。(2)将所有的数据写在一个花括号里,按数组顺序对各元素赋初值。3.void型函数可以不加返回值(可以不用写return)。2.没有定义函数类型的函数默认返回值为int型。4.return后的返回值必须与函数类型一致。1、从函数的形式看,分为无参函数和有参函数。注:1.主调函数放在后面,被调函数放在前面。1、二维数组的一般形式为。(1) 分行给二维数组赋初值。(3)可以对部分元素赋初值。

2024-07-24 19:47:48 297

原创 字符数组和字符串

(1)字符数组是用来存储一系列字符的数据结构。(2)在C语言中,字符数组经常用于处理字符串。(3)字符数组以‘\0’(空字符)作为结束标志,表示字符串的结束。(1)定义:使用char关键字定义字符数组。char s[50];表示定义了一个可以存储50个字符的数组。(2)初始化:可以在定义时进行初始化。自动计算数组大小并初始化。

2024-07-23 19:32:56 484

原创 数组的定义和引用

(2)在定义数组时,需要指定数组元素的个数,方括号的常量表达式用来表示元素的个数,即数组长度。(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。(3)常量表达式中可以包括常量和符号常量,不能包含程序运行中可变的值。(1)数组名的命名规则和变量名相同,遵循标识符命名规则。1、定义方式:类型说明符 数组名[常量表达式];(1)数组元素的表示形式为 数组名[下标](1)在定义数组时对数组元素赋予初值,用花括号。2、数组必须先定义,然后使用。(2)可以只给一部分元素赋值。

2024-07-22 20:26:18 1236

原创 循环体结构

7、表达式一般是关系表达式(如i<=100)或逻辑表达式(如a<b&&x<y),但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。注:1、for语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环。2、如果表达式2省略,即不判断循环条件,循环无终止地进行下去。6、表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的。3、表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束;4、可以省略表达式1和表达式3,只有表达式2,即只给循环条件;

2024-07-20 17:43:19 1099

原创 C语言选择结构

2024-07-19 20:47:49 116

原创 输入和输出

%m.nf ”表示输出的数一共占m位(包括小数点),小数保留n位有效数字。long 类型的,%d只能输出四个字节,将其他字节忽略,则需用%ld来扩展解决,无符号类型相同(%llu)。float类型对应格式控制符为%f,scanf函数的模式%f 默认为四字节,则double类型对应格式控制符需为%lf;3、在输入和输出之间存在缓冲区,且遵循FIFO(先进先出)的原则。注意:scanf函数的地址列表必须为变量地址,由“&”开头。4、sqrt 平方根函数,pow(x,y)表示x的y次幂。

2024-07-18 19:53:18 224

原创 运算符

lvalue:left value(locatable)左值,可以被定义到的(被取到地址的)3、random函数(随机获取一个数)和time的函数(获取时间)了解和使用。int = unsigende short 因为无符号,直接补0。int = short (符号位扩展) 正数补0,负数补1;short = int 高位截断(低位保留,高位丢弃);9、显式转换:变量前加 (类型)强制转化为括号中类型。5、++ 自增对于整形、浮点型、字符型都适用。6、临时变量(匿名变量)通通为右值。

2024-07-17 18:55:12 249

原创 数据类型标识符

short(unsigned short):2 范围:-2^15 ~ 2^15-1(0 ~ 2^16)long(unsigned long):8 范围:-2^63 ~ 2^63-1(0 ~ 2^64-1)2、二进制,八进制,十进制,十六进制的相互转化;使用八进制,十六进制的原因:计算机好转化为二进制的01低高电平。int(unsigned int):4 范围:-2^31 ~ 2^31-1(0 ~ 2^32-1)1、标识符的命名规则:使用字母,数字,下划线;3、计算机内存的大小端模式;

2024-07-16 18:17:00 231

空空如也

空空如也

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

TA关注的人

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