自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于libxml的使用

libxml2库的一些基本使用

2022-09-08 15:10:46 717

原创 Git的使用

本文主要讲解Git的使用

2022-07-18 21:26:54 243 1

原创 【7】粘包丢包

int sqlite3_get_table(sqlite3 db, / 要打开的数据库 */const char zSql, / sql语句 */char **pazResult, / 成功执行sql语句存放的结果 */int pnRow, / 执行结果的行数 */int pnColumn, / 执行结果的列数 */char *pzErrmsg / 错误信息 */);void sqlite3_free_table(

2022-05-24 08:21:55 412

原创 【6】组播 & UNIX 套接字 & sqlite

【1】组播组播代码流程:—UDP协议发送者:1、创建用户数据报套接字2、指定组播地址224.0.0.0~3、发送(sendto)接收者:1、创建用户数据报套接字2、设置套接字属性为组播属性IPPROTO_IPstruct ip_mreqn {struct in_addr imr_multiaddr; /* IP multicast groupaddress */struct in_addr imr_address; /* IP address of local interfac

2022-05-24 08:21:24 188

原创 【5】三次握手&四次挥手&抓包工具&网络超时函数&广播

【1】TCP如何保证传输可靠?引入:TCP的三次握手和四次挥手机制三次握手机制:第一次握手:客户端connect主动请求连接服务器发送序列号Y、同步标志SYN,此时客户端处于SYN_SEND状态第二次握手:服务器接收到客户端请求并回应客户端序列号X,确认号Y+1、应答标志ACK,同步标志SYN此时服务器处于SYN_RECV状态第三次握手:客户端收到服务器请求回应服务器确认号X+1,应答标志ACK此时服务器处于:ESTABLISH状态。四次挥手机制:第一次挥手:客户端主动close关闭

2022-05-24 08:20:32 199

原创 【4】epoll和线程并发、进程并发

【1】epollepoll并发模型可以解决select缺陷,实现高效率,百万级服务器模型,被称为二十一世纪最好用的并发模型。epoll的优点:1、最大连接数量没有限制,上限是系统可以最大打开的文件数目;2、epoll是一种异步通知,无需轮询,效率要比select高3、成功返回实际事件个数,有效轮询。API接口:1.int epoll_createint epoll_create(int size);功能:创建红黑树根节点参数:size已经废弃掉,填1即可返回值:成功返回红黑树的一个句柄

2022-05-24 08:20:01 684 1

原创 【1】标准IO

【1】标准IO(input\output)1.概念:标准IO是指在C库中提供的一组专门用于输入输出的函数2.特点:不仅在UNIX系统,在很多操作系统上都实现了标准I/O库标准I/O库由ANSI C标准说明标准I/O通过缓冲机制减少系统调用,实现更高效率 标准I/O在系统调用函数基础上构造的,它便于用户使用标准IO默认打开了三个流:stdin、stdout、stderr3.流:定义:所有的I/O操作仅是简单的从程序移进或者移出,这种字节流,就称为流4.FILE:(文件流指针)每个被使

2022-05-18 21:54:47 470

原创 【3】select通讯

IO模型:(1)阻塞IO模型 read write(2)非阻塞IO模型 putc(3)IO多路复用 select【1】fcntl​ 通过该函数设置文件描述符的属性​ int fcntl(int fd, int cmd, long arg);​ int flag;​ flag = fcntl(0, F_GETFL); // 1.获取该文件描述符的原属性​ flag |= O_NONBLOCK; //2. 修改对应的位​ fcntl(0, F_SE

2022-05-17 18:55:40 109

原创 【2】UDP编程

【1】UDP​ 无连接,不可靠的传输协议;​UDP编程流程:服务器端: 1. socket(),返回一个文件描述符,用于通信 2. bind(); //得先完成结构体的填充sockaddr_in 3. recvfrom(), //接收数据 4. sendto(), //发送数据 5. close(sockfd); 客户端: 1. socket(), 返回一个文件描述符,用于通信 2. 填充结构体,(目的是告诉程序,数据要发送给谁) 3. sendto() 4.

2022-05-17 18:54:13 101

原创 【1】 IP和TCP

【1】 IP分类​ 192.168.1.31 C类 , 点分十进制IP​ C0A8011F 4*8 = 32位​ 104.243.29.189 IP分类: A类: 第1字节为网络地址,其他3个字节为主机地址。第1字节的最高位固定为0; 0.0.0.0 - 127.255.255.255 B类: 128.0.0.0 - 191.255.255.255 C类: 192.0.0.0 - 223.255.255.255 D类: 224.0.0.

2022-05-17 18:53:34 178

原创 栈的应用(实现运算)

尝试做以下习题://表达式char a[] = "3+5*2-1+8/2"5 * 2 == 103 + 10 == 1313 - 1 == 128 / 2 = 412 + 4 = 16上面的表达式可以用栈来实现创建2个栈 1 操作数栈(3, 5, 2, 1, 8, 2)2 运算符栈('+' '*' '-' '+' '*') linkstack.c#include <stdio.h>#include <stdlib.h>#include "links

2022-05-04 16:30:23 461

原创 双向循环链表解决约瑟夫问题

双向循环链表解决约瑟夫问题#include <stdio.h>#include <stdlib.h>typedef int datatype;typedef struct node_t{ datatype data; struct node_t * prior; struct node_t * next;}link_node_t,*link_list_t;typedef struct doublelinklist{ link_list_t head; l

2022-05-04 16:29:52 1162

原创 霍夫曼树(最优二叉树)

霍夫曼树(最优二叉树)所有带权值的节点都是叶节点(1)将每一个带权值的节点看做一颗树的根,将其放入到链表中(放入的过程,将带权权值的节点按照 权值的大小顺序插入链表)(2)重复 从链表中取出前两节点(前两个节点也就是权值相对最小的两个节点),作为叶子节点,再创建一个新的树根节点,作为这两个叶子的父节点,父节点的权值 = 左子权值 + 右子权值,再将刚才形成的新树,插入到链表,最终循环结束时,链表中只有一个节点,也就是霍夫曼树的根节点(3)打印霍夫曼树 (层次遍历)(4)霍夫编码:子节点先将

2022-05-04 16:29:20 683

原创 【12】图

图1.1 图的概念图(Graph)是一种非线性数据结构1.2 图的基本术语​(1)有向图和无向图(2)网: 弧边上有权值,带权值得图成为网(3)顶点的度(4)路径:路径上边的条数定义为该路径的长度1.3 图的特征任意的两个元素都可能相关,即图中任一元素可以有若干个直接前驱和直接后继属于网状结构类型。 ​1.4 图的存储结构(1)邻接矩阵(数组)//////////////////有向图和无向图////////////////////#include <s

2022-05-04 16:28:43 387

原创 【11】排序

排序方法1.影响排序的效率有哪些(1)交换次数(2)移动次数2.稳定排序和非稳定排序设文件f=(R1……Ri……Rj……Rn)中记录Ri、Rj(i≠j,i、j=1……n)的key相等,即Ki=Kj。若在排序前Ri领先于Rj,排序后Ri仍领先于Rj,则称这种排序是稳定的,其含义是它没有破坏原本已有序的次序。反之,若排序后Ri与Rj的次序有可能颠倒,则这种排序是非稳定的,即它有可能破坏了原本已有序记录的次序。12 3 34a 1 423 34b//不稳定排序如果你排序结束后 34b 在

2022-05-04 16:28:14 718

原创 【10】查找

查找方法1.顺序查找####练习####(1)main函数中定义一个数组int a[10] = {12,34,45,23,54,2,4,65,23}(2)定义一个函数,查找指定数据(3)如果找到了,返回它的位置,数组下标即可,未找到返回-1(4)main函数中测试//p 保存数组首地址,n元素个数,value 要查找的值 findByOrder(int *p, int n,int value)#include <stdio.h>int findByOrder(int *p,

2022-05-03 21:31:52 199

原创 【9】树的基本操作

树概念:树(Tree)是(n>=0)个节点的有限集合T,它满足两个条件 :有且仅有一个特定的称为根(Root)的节点;其余的节点可以分为m(m≥0)个互不相交的有限集合T1、T2、……、Tm,其中每一个集合又是一棵树,并称为其根的子树(Subtree)。 特征: 一对多,每个节点最多有一个前驱,但可以有多个后继(根节点无前驱,叶节点无后继)1.1 关于树的一些基本念(1)度数:一个节点的子树的个数 (2)树度数:树中节点的最大度数(3)叶节点或终端节点: 度数为零的节点

2022-05-03 21:30:45 397

原创 【8】链式队列

链式队列:逻辑结构: 线性结构 存储结构:链式存储结构 队头 队尾--》创建一个链式队列,需要拿到头节点(队头)的地址 尾节点(队尾)节点的地址。QueueLink.c/**** Created by 24122 on 2022/4/25.**/#include <stdio.h>#include <stdlib.h>#include "QueueLink.h"/*** 1.创建一根空的链式队列*/queue_t

2022-05-03 21:30:03 112

原创 【7】顺序队列

什么是队列?只允许在两端进行插入和删除操作的线性表,在队尾插入,在队头删除插入的一端,被称为"队尾",删除的一端被称为"队头",在队列操作过程中,为了提高效率,以调整指针代替队列元素的移动,并将数组作为循环队列的操作空间。特点:先进先出 FIFO后进后出 LILO顺序队列(又称循环队列)逻辑结构: 线性结构 存储结构:顺序存储结构SeQueue.c/**** Created by 24122 on 2022/4/24.**/#include <stdio.h>

2022-05-03 21:29:38 86

原创 【6】链式栈

链式栈(1)逻辑结构: 线性结构(2)存储结构: 链式存储 (3)顺序栈和链式栈的区别是 实现的方式不同,链栈用链表不限定长度,随用随开节点空间。LinkStack.c/**** Created by 24122 on 2022/4/24.**/#include <stdio.h>#include <stdlib.h>#include "LinkStack.h"void CreateLinkStack(stack_t **ptop){ *ptop

2022-05-03 21:28:44 261

原创 【5】顺序栈

栈1.什么是栈?只能在一端进行插入和删除操作的线性表(又称为堆栈),进行插入和删除操作的一端称为栈顶,另一端称为栈底栈特点:先进后出 FILO first last in out 后进先出 LIFO顺序栈 :sequeue 顺序 stack 栈逻辑结构:线性结构存储结构:顺序存储(数组)SeqStack.h/**** Created by 24122 on 2022/4/23.**/#ifndef DATASTRUCTURE_SEQSTACK_H#define D

2022-05-03 21:28:13 98

原创 【4】单向循环链表

单向循环链表:所有指针域和数据域都是有效的。 无头单向链表尾节点的指针域保存头节点的地址,就可以形成单向循环链表。用单向循环链表解决约瑟夫问题: 通过一定的规律找出一个最终的值。总结:面试题顺序表和单向链表比较(1)顺序表在内存当中连续存储的(数组),但是链表在内存当中是不连续存储的,通过指针将数据链接在一起(2)顺序表的长度是固定的,但是链表长度不固定(2)顺序表查找方便,但是插入和删除麻烦,链表,插入和删除方便,查找麻烦#include <stdio.h>#

2022-05-03 21:27:22 358

原创 【3】链表 (单向)

链表 (单向)单向链表、单向循环链表、双向链表、双向循环链表开辟的是单个的存储空间,通过地址将他们联系在一起。 逻辑结构:线性结构 存储结构:链式存储单向:1.有头单向链表链表中的头节点数据域无效,指针域有效。2.无头单向链表 所有节点的数据域和指针域都是有效的。Link List.c/**** Created by 24122 on 2022/4/23.**/#include <stdio.h>#include <stdlib.h>#inclu

2022-05-03 21:26:54 116

原创 【2】顺序表

顺序表特点:内存空间是连续开辟。(数组) 逻辑结构:线性结构 存储结构:顺序存储结构SeqList.c/**** Created by 扫地僧头发多 on 2022/4/22. * 顺序表的基本操作**/#include <stdio.h>#include "SeqList.h"#include <stdlib.h>/*** 1.创建一个空的顺序表*/seqlist_t *CreateSeqList(void){ //1.申请开辟空间

2022-05-03 21:26:17 80

原创 【1】绪论

【1】数据结构​ 概念:数据的逻辑结构存储结构及操作1.数据​ 数据:不只是一个单独的数值,是一个集合的概念​ 数据元素:数据的基本单位,由基本的数据项构成。​ (如:整个图书馆就是一个数据,一本书就是一个数据元素。​ 描述这本数据的每个信息就是数据项。)​ 数据项:是数据元素的基本单位,描述数据元素拥有的信息 节点:就是数据元素2.逻辑结构​ 概念:描述数据之间的逻辑规律和数据之间的联系​ (元素与元素之间的关系)逻辑结构的分类:

2022-05-03 21:25:46 301

原创 学生管理系统(C)

学生管理系统1)系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令。2)开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命令 T 录入学生成绩。”同理,当输入其他的成绩处理命令时也作相应的处理。3)输入命令 T,调用Type子函数录入成绩。界面提示输入学生人数输入3 ;提示输入3名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,提示学号:1输入1号学生的3门课成绩,用空格间隔,回车结束。提示学号:2输入2号学生的3门课成绩,

2022-04-19 21:19:01 325

原创 每日一练(字符串)

将数组char a[]=“acegikm”;char b[]=“bdfhjlnopq”;将上面两个数组按abcd…整合到数组c中。用指针实现。#include <stdio.h>#include <string.h>/* * @char a[]="acegikm"; * char b[]="bdfhjlnopq"; * 将上面两个数组按abcd.....整合到数组c中。用指针实现. */int main() { char s1[32] = {0}; c

2022-04-19 21:15:28 103

原创 每日一练(字符串)

1.输入一个字符串,内有数字和非数int字字符,如 a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到整型数组a中。例如,123放在a[0]a,456放在a[1],统计共有多少个整数,并输出这些数。```c#include <stdio.h>void array(char *p);int main() { char s[32] = {0}; char *p = s; printf("请输入字符串\n");

2022-04-19 21:13:04 173

原创 【6】make编译

【1】gcc编译器​ 1.预处理 :处理的是’#'开头的头文件,宏定义​ 单纯替换到文件中,不进行语法错误的检测。​ gcc -E xxx.c -o xxx.i​ 2.编译:将.i文件生成汇编文件,会检测无法错误。​ gcc -S xxx.i -o xxx.s​ 3.汇编:将汇编文件生成不可执行的二进制文件​ gcc -c xxx.s -o xxx.o​ 4.链接:将所有的二进制文件和库链接生成可执行二进制文件​ gcc

2022-04-19 20:56:53 1188

原创 【5】shell数组、函数

【1】控制语句【1】循环语句1》for循环​ for…do…done​ 格式:​ for 变量名 in 单词表​ do​ 命令表​ done​ 变量依次取单词表中的各个单词, 每取一次单词, 就执行一次​ 循环体中的命令. 循环次数由单词表中的单词数确定. 命令表中的​ 命令可以是一条, 也可以是由分号或换行符分开的多条。​ for语句的几种书写格式:​ 1)for i in 1 2 3 4 do…

2022-04-19 20:47:12 121

原创 【4】shell脚本编译、变量,语句

【1】shell脚本编程shell--》解析器:sh ksh csh bashshell脚本:本质--》shell命令的有序集合 shell脚本编程:将shell命令按照一定的逻辑顺序实现指定功能, 放到一个文件中文件叫脚本文件,后缀.sh,可以直接执行, 不用编译。 shell脚本语言--》解释型语言写一个shell脚本文件步骤:1.创建一个脚本文件touch xxx.sh2.将脚本文件权限修改为可执行chmod 777 xxx.sh3.编辑脚本内容vi

2022-04-19 20:46:41 520

原创 【3】 Shell基本系统命令

【1】 TFTP 、nfs、samba三个服务器的配置。​ 详细配置见文档。【2】Shell基本系统命令1.man​ man man:查看man手册功能2.sudo passwd 用户名:修改用户密码3.su 切换用户​ su: 默认切换到root​ sudo su 用户名:切换到指定用户​ exit :退出切换的用户4.date 查看系统的日期的​ sudo date -s 年/月/日​ sudo d

2022-04-19 20:44:37 471

原创 【2】shell

【0】复习GUN 自由软件组织 --》开源很libc gcc make等GPL 开源协议 --》底层驱动linux unixlinux架构--》cat /dev/input/mouse0 linux中一切皆文件内核五大功能: 文件、设备(块设备、字符设备、网络设备)、网络、内存、进程c库:系统调用之前做的封装,标准库,不同操作系统上使用。系统调用:基于内核,内核向上提供的函数接口。操作系统:cat /etc/issue lsb_rele

2022-04-19 20:42:53 434

原创 【1】嵌入式系统

【1】嵌入式系统****​ 以计算机应用为中心,软硬件可裁剪的专用计算机系统,对功耗、体积、性能等都有一定要求。不同操作系统的内核:·windows NTandroid linuxmacOs ios unixubuntu linuxredhat linux【2】linux 特点***​ linux开源,免费使用,内核源码开源,针对商业非免费。​ linux多用户、多任务、分时操作系统,是软硬件可裁剪的操作

2022-04-19 20:42:31 274

原创 C语言习题

1.将数组char a[]=“acegikm”; char b[]=“bdfhjlnopq”; 将上面两个数组按abcd…整合到数组c中。用指针实现。#include <stdio.h>#include <string.h>/* * @char a[]="acegikm"; * char b[]="bdfhjlnopq"; * 将上面两个数组按abcd.....整合到数组c中。用指针实现. */int main() { char s1[32

2022-04-13 23:33:36 99

原创 九、结构体共用体枚举

【1】结构体1.概念:由用户自定义的一种构造类型,用于描述一个复杂事物,表示多种不同类型数据的集合。2.定义格式:​ struct 结构体名​ {​ 数据类型 成员1;​ 数据类型 成员2;​ …​ 数据类型 成员n;​ };3.结构体类型大小1)字节对齐原则​ 选取结构体成员中最大的类型跟value(4字节)比较,按字节数小的为标准开辟空间。2)节省空间原则​ 在保证数据不被破坏的前提下,尽可能向上压缩空间。3)

2022-04-07 17:26:38 256

原创 八、函数详解

【1】函数1.概念:具备特殊功能的代码模块2.作用:1.将复杂任务进行拆分,实现模块化编程2.有效减少代码重复3.格式:​ //返回值类型 函数名(参数)​ int main (int argc, const char *argv[])​ {​ …​ //代码段​ //返回值​ return 0;​ } 参数: 形参:形式参

2022-04-07 17:26:07 84

原创 七、指针详解

【1】指针1.概念​ 地址:内存中每个自己都有唯一的编号,这编号就是地址。(门牌号)​ 指针:就是地址。​ 指针变量:存储指针(地址)的变量就是指针变量。2.定义格式:​ [存储类型] [数据类型] *指针变量名;​ (auto) int *p; * :在定义指针变量时,*仅起标识作用。 数据类型:指针的数据类型要和指向的数据类型统一。#### 3.指针的应用:##### 1)指针赋值运算 ​

2022-04-07 17:25:27 1447

原创 六、字符数组

【1】字符数组1.概念:存储字符的数组称为字符数组字符串的结束标志是’\0’"abc"实际存储’a’‘b’‘c’‘\0’2.字符数组初始化方式: char s[10] = {"hello"}; char s[10] = "hello"; char s[10] = {'h','e','l','l','o'}; char string[] = "hello"; //数组的大小根据初始化时实际使用的空间来开辟 //sizeof(string) = 6 char s[]

2022-04-07 17:23:58 5915

原创 五、数组及其冒泡选择排序

【1】数组1.概念:一组同种类型的数据的集合2.特点:1)类型相同2)顺序存储3)地址连续3.定义格式:​ [存储类型] [数据类型] 数组名[大小]; ​ (auto) int num[10];​ 大小:元素个数​ 数组名:1)遵守标识符命名规则​ 2)数组名代表数组的首地址 num <=> &num[0]​ 数组元素:下标从0开始到n-1 num[0] ~ nu

2022-04-07 17:23:35 531

空空如也

空空如也

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

TA关注的人

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