- 博客(28)
- 收藏
- 关注
原创 数据结构 -- 哈希表和内核链表
一种支持高效存储与查找的数据结构,目标查找复杂度为 O(1)∼O(lgN) ,通过哈希函数映射数据到存储位置,平衡存储与查询效率。
2025-08-23 17:05:37
321
原创 数据结构 -- 树
树是由n(n ≥ 0)当n = 0时,称为空树;当n > 0时,存在唯一的根结点(无前驱结点),其余结点可划分为m(m ≥ 0)个互不相交的有限子集,每个子集都是一棵独立的子树。二叉树是n(n ≥ 0)当n = 0时,为空二叉树;当n > 0时,由根结点左子树和右子树组成,且左、右子树互不相交,均为二叉树。
2025-08-23 00:04:39
759
原创 数据结构 -- 队列
队列是受限线性表,仅允许在一端(队尾)插入元素、另一端(队头)删除元素,遵循“先进先出(FIFO,First In First Out)”原则。
2025-08-22 14:19:16
342
原创 数据结构 -- 栈
栈是一种受限线性表,仅允许在表的一端(栈顶)进行插入(入栈)、删除(出栈)操作,遵循“先进后出(LIFO,Last In First Out)”原则。
2025-08-22 11:39:43
326
原创 数据结构 -- 链表--双向链表的特点、操作函数
需要反向遍历链表(例如,从大到小输出一个有序链表)时,双向链表非常高效。:同样,在已知某个节点指针的情况下,双向链表可以在 O(1) 时间内完成在其前面的插入操作。:每个节点都需要一个额外的指针来存储前驱节点的地址。对于节点数据本身很小的链表(例如,只存储一个整数),这个额外的指针开销占比会很大。双向链表(Doubly Linked List)是一种更复杂的链表,它的每个节点不仅包含指向下一个节点的指针(:在已知某个节点指针的情况下,双向链表可以在 O(1) 时间内删除该节点,因为它可以直接通过。
2025-08-21 18:35:25
254
原创 数据结构 -- 链表--单向链表的特点、操作函数
的基本概念:它是一种 “一对一” 的有序数据结构,比如排队的人、一串数字(1,2,3,4),每个元素(除了第一个和最后一个)都有唯一的前一个和后一个元素。链表没有下标,想访问第 n 个元素,必须从第一个节点开始,顺着指针一个个往后找(像 “顺着钩子找珠子”),所以找元素比数组慢。链表中插入元素,只需要改两个指针:新节点的指针指向 “下一个节点”,前一个节点的指针指向 “新节点”,其他元素不用动。(删除同理,只需要把前一个节点的指针跳过要删的节点,指向它的下一个节点就行),而是指向第一个节点,形成一个环。
2025-08-19 17:55:16
785
原创 数据结构与算法核心知识整理
解决问题的 “清晰步骤清单”,类似 “菜谱步骤”“路线规划”,与数据结构配合:数据结构负责 “存数据”,算法负责 “用数据解决问题”。
2025-08-18 10:46:20
404
原创 Linux系统 -- 文件编程(系统调用-文件IO)
注:umask 是进程属性,用于屏蔽不需要的权限,可通过。类型),而标准库函数使用 FILE 指针(系统调用使用文件描述符(
2025-08-17 18:10:28
479
原创 linux系统-- 文件编程(C库函数-标准IO)
C 语言文件操作遵循 "打开→读写→关闭" 的基本流程,核心依赖标准库。流打开函数 ,打开 pathname指定的文件,并 关联一个流。不适合二进制文件(如图片、视频),因为二进制文件中可能包含。适合处理二进制文件或固定结构的数据(如结构体),不依赖。实现内存与外部存储(如硬盘文件)的数据交互。:流指针 ,关联到这个流上 ,代表这个流。:内存与外部文件之间的 "数据通道",的作用是创建该通道并关联到指定文件。:检查是否到达文件结尾。打印错误信息(需包含。:检查流是否发生错误。
2025-08-12 22:39:30
681
原创 shell编程
核心作用作为用户与操作系统内核的交互接口,解析并执行用户输入的命令运行用户程序(通过调用系统接口),隔离用户操作与内核,保护操作系统安全支持批量命令执行(脚本化),提升操作效率定义规则变量名 = 值(等号两侧无空格,区分大小写)无需声明类型(弱类型,默认字符串,可自动转换为数值)操作bashname="Alice" # 定义变量echo $name # 引用变量($不可省略)unset name # 删除变量# 只读变量(无法修改或删除)
2025-08-12 19:00:31
562
原创 C语言 -- 位运算
进行操作的运算方式,在嵌入式开发中常用于硬件寄存器控制(如 GPIO 配置、状态位读写等),具有执行效率高、操作精准的特点。为反掩码,仅第 n 位为 0,其余为 1)。为掩码,仅第 n 位为 1,其余为 0)。用于生成 "反掩码",配合 & 实现清零。其他位",需配合掩码(mask)使用。循环左移:左移后溢出的高位补到低位。(非 0 则第 n 位为 1)。需要的位,保留其他位"。用于 "保留需要的位,位运算是直接对整数的。
2025-08-11 20:12:50
250
原创 C语言 -- 结构体,共用体,枚举
语法struct 结构体名 {成员类型1 成员名1;// 成员可以是基本类型、数组、指针甚至其他结构体成员类型2 成员名2;...// 必须带分号示例:描述学生信息int sno;// 学号(整数)// 姓名(字符串)char sex;// 性别(字符)// 成绩(浮点型)// 必须带分号定义方式说明示例先定义类型,再定义变量最常用,类型可重复使用定义类型时直接定义变量一次性定义类型和变量匿名结构体(无类型名)仅能在定义时创建变量,类型无法复用char b;} temp;语法。
2025-08-08 21:53:18
476
原创 C语言 -- 指针(快速排序,使用数组)
修饰指针时需区分 “修饰基类型” 和 “修饰指针本身”,遵循。:结果为两个指针之间相差的 “基类型元素个数”(整型)。:指针地址增加 “基类型大小”(而非 1 字节)。),指针操作字符串需注意存储区域和可修改性。:逐个比较字符 ASCII 值,返回差值(数组的本质是连续存储空间,指针通过。可用于判断指针是否越界。修改指向的内容,若内容可写)。同时修饰基类型和指针本身,:比较指针指向的地址位置。(指向数组的指针)操作。,可高效操作数组元素。(距离谁近就修饰谁)。本身可指向其他地址)。为负,相等为 0)。
2025-08-07 00:01:49
682
原创 C 语言 -- 指针详解
指针变量用于存储地址,需明确基类型、指针修饰符和变量名。基类型:指针指向的内存空间中存储的数据类型,决定了空间的大小(如 int 为 4 字节)和使用规则。:修饰符,表明定义的是指针变量(非普通变量)。指针变量名:符合标识符命名规则的名称(如 p、ptr 等)。int a = 10;// 定义int型变量a// 定义int*型指针p,用a的地址(&a)初始化,即p指向a定义多个指针变量时,每个变量前都需加// 正确:p1、p2、p3均为int*型指针// 错误写法:int* p1, p2;
2025-08-05 21:38:57
902
原创 C语言 -- 函数
函数可以直接定义在调用它的代码(如main函数)之前。例如:// 函数定义在调用前// 调用add,此时已定义return 0;若函数定义在调用它的代码之后,必须在调用前进行函数声明(声明函数的返回类型、名称和参数列表)。// 函数声明// 调用前已声明,可正常使用return 0;// 函数定义在调用后总结:函数要么先定义再调用,要么先声明再调用(定义可放在后面)。若未声明且定义在调用后,编译器会报错。
2025-07-31 21:50:19
1017
原创 C语言 -- 二维数组(整型数组,字符型数组)
/二维数组能省略行数,从本质上看,实际上相当于是一维数组的长度被省略 了。//定义了一个 可以包含 3个 int[4]的 一维数组。//a的数据类型 --- int[3][4] --- 二维数组类型。//int[4] --- 整型一维数组类型。二维数组的本质 --- 还是一维数组 ,是“数组的数组”[常量表达式1] //第一维 -- 行。[常量表达式2] //第二维 -- 列。
2025-07-30 23:58:29
267
原创 C语言 -- 数组(排序,查找)
◦ 示例:数组 [3,1,4,2],第1步插入1:已排序部分 [3],1<3,插入后为 [1,3];第3步插入2:2<4→4后移,2<3→3后移,插入到1后,得 [1,2,3,4]。◦ 示例:数组 [3,1,4,2],第1轮找到最小值1与3交换,得 [1,3,4,2];◦ 示例:数组 [3,1,4,2],第1轮比较后变为 [1,3,2,4](4冒泡到末尾);第3轮无交换,排序完成。◦ 第2轮:从第2个元素开始遍历剩余元素,找到最小值,与第2个元素交换,此时前2个元素为已排序。
2025-07-30 09:23:23
380
原创 C语言 --- 一维数组(整型数组,字符型数组)
省略数组长度:int a[] = {1,2,3,4};(数组长度由初始化元素个数决定,此处为4,注意:数组长度省略的情况下,必须要有初始化的值 ,并且不能写成这样 int a[];部分初始化:int a[10] = {1,2,3,4,5};全部初始化:int a[10] = {1,2,3,4,5,6,7,8,9,10};初始化为0:int a[10] = {};数组名[下标] //此时[]是运算符 下标运算符。b.单一性 --- 每个元素大小一样。a.连续性 --- 连续空间。
2025-07-29 09:05:38
172
原创 C语言 --- 循环结构,循环语句
1. 初始条件2. 结束条件3. 循环体4. 使循环趋于结束的 结束语句 或 操作C语言中提供循环的控制语句分三种 --- while,do - while ,forfor(表达式1;表达式2;表达式3) //表达式1为初始化,表达式2为结束条件(条件判断),表达式3为迭代操作语句;//循环体语义:1.求解 表达式1。
2025-07-28 23:33:02
288
原创 C语言---流程控制(选择结构,选择语句)
8.在 switch 语句中,如果需要在case分支内定义变量,必须使用花括号创建独立的代码。注意: else 和 if 是成对出现的,即没有单独的 else 语句,但可以有单独的 if 语句。5.default 的位置是灵活的,但是如果被放在前面,一定要加break。C语言中没有bool(布尔类型),用 数值1代表真,用 数值0代表真,用的是int类型的数据。3.case 后面必须是整型常量表达式,不能有变量,也不能是浮点型常量。求解 (整型表达式)?, 得到的结果 , case 后的值 进行匹配。
2025-07-27 17:47:15
809
原创 C语言--变量命名规范,语句分类,输入输出
c函数库 --- 标准输入输出库 stdio i -- input o -- output。%X --- 表示将数据 转换为 十六进制形式 十六进制中出现的 字母的这些值 输出成大写形式。占位符 : %d %u ---占位符 会将输入进的数据,转换为指定的格式。占位符 : %d %u ---占位符 会被替换为输出列表中 对应的数据。普通字符 : 不是占位符的其他字符 都是普通字符 ---- 原样输出。普通字符: 不是占位符的其他字符 都是普通字符 ---- 原样输入。
2025-07-25 21:20:14
667
原创 C语言中的转义字符与运算符
复合赋值运算符有: += , -= , *= , /= , %= , >= , &= , /\= ,!有符号的短类型 --- 高位补的是符号位。C语言中的运算符有很多种类,如算术运算符,赋值运算符,逗号运算符,关系运算符,逻辑运算。左值=值 将右边的值,给到左边的左值空间中 , 左值,充当运算的结果值。\r --- 回车,(此处C语言中的不同与电脑中的回车键)表示将当前位置移到本行开头。短类型=>长类型 无符号的短类型 --- 高位补0。
2025-07-24 21:03:44
924
原创 C语言基本数据类型
符号位(最高位)--1位 指数位--11位 尾数位--52位(小数点后的,不够补零)signed short ---负数,0,正数,32位划分为符号位(最高位)和数值位,符号位(最高位)--1位 指数位--8位 尾数位--23位(小数点后的,不够补零)signed int ---负数,0,正数,32位划分为符号位(最高位)和数值位,5.不能和C语言中的关键字重名 (32个关键字)---反码---原码符号位不变,其余位按位取反。
2025-07-23 20:57:27
378
原创 linux基础
mv 123.txt dir1 //将当前位置下的123.txt 移动到dir1目录下 mv dir1 dir2 //dir2 如果存在,是将dir1 移动到dir2中。cp 123.txt dir1/456.txt //将当前位置下的123.txt 复制成dir1目录下的,名字叫456.txt。//dir2 如果不存在,就是重命名。
2025-07-22 20:59:37
299
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人