- 博客(55)
- 收藏
- 关注
原创 数据结构-排序-排序的七种算法(2)
重复遍历列表,比较相邻元素,如果顺序错误就交换它们最好:O(n)(已有序时)平均:O(n²)最坏:O(n²):O(1):稳定实现简单对部分有序数据效率较高每轮将最大元素"冒泡"到末尾。
2025-06-01 14:55:49
1108
原创 数据结构-排序(1)
给定一个包含n个元素的序列和一个关键码Ki(通常是记录Ri的一个属性),排序的目标是找到一个排列,使得关键码序列满足一个特定的或关系。就是把一堆杂乱无章的数据,按照某种规则(比如数字大小、字母顺序、日期先后)排列整齐的过程。
2025-05-28 21:10:51
1082
原创 数据结构-查找(1)
适用于数据频繁变动的场景,通过动态平衡结构(如AVL树、B+树)维护操作效率。:平均 𝑂(loglog𝑛)O(loglogn),最坏 𝑂(𝑛)O(n)。:平均 𝑂(log𝑛)O(logn),最坏 𝑂(𝑛)O(n)(退化为链表)。:适用于数据固定的场景,以预处理(如排序)换取高效查询,典型方法为二分查找。:平均 𝑂(1)O(1),最坏 𝑂(𝑛)O(n)(冲突严重时)。)采用哈希表,支持平均 𝑂(1)O(1) 的查找。:严格 𝑂(log𝑛)O(logn)。:是否依赖数据结构的
2025-05-26 21:31:58
901
原创 数据结构-树(2)
二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两颗互不相交的,分别称为根结点的左子树和右子树的二叉树组合。 如图: 特点:每个结点最多 2 子树,区分左右顺序如下思维导图:性质一:第 i 层最多 2^(i-1) 个结点(i≥1)性质二:深度为 k 的二叉树最多 2^k-1 个结点。性质三:终端结点数 n₀ = 度为 2 的结点数 n₂ + 1(n₀ = n₂ + 1)。终端结点数 n₀ = 度为 2
2025-05-12 15:29:02
1165
原创 数据结构-树(1)
其中 data 是数据域,frstchikd 为指针域,存储该结点的第一个孩子结点的存储地址,rightsib是指针域,存储该结点的右兄弟结点的存储地址。这种方法克服了浪费空间的缺点,对空间利用率是很高的,但是由于各个结点的链表是不相同的结构,加上要维护结点的度的 数值,在运算上就会带来时间上的损耗。任一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的。这种方法对于树中的各个结点的度相差很大时,显然是很浪费空间的,因为有很多的结点,它的指针域是空的。每个结点有多个指针域,其中。
2025-05-12 11:32:15
1155
原创 数据结构之串
定义:串是由零个或多个字符组成的有限序列,记作 s="a1a2…an",例如 "data structure"、"123" 等。空串:无任何字符,长度为 0,用""表示,例如短信内容为空时即为空串。空格串:由一个或多个空格组成,有长度,例如 " "(3 个空格)。子串与主串:子串是主串中连续字符序列。生活实例:回文诗 “上海自来水来自海上” 是一个串,其正读和反读相同,体现了串的逆序特性;英文单词 “friend” 中,“end” 是子串,“friend” 是主串。
2025-05-08 17:16:30
1141
原创 数据结构之栈与队列
栈:队列:plaintext 队列: plaintext 4、典型应用场景 场景 栈的应用 队列的应用 函数调用 存储函数调用的参数、返回地址(系统栈自动管理)。 无直接应用,函数调用本质是栈结构。 表达式处理 后缀表达式求值、中缀转后缀(处理运算符优先级)。 无相关应用。 括号匹配 检测括号是否正确嵌套(如)。 无相关应用。 任务调度
2025-05-07 21:39:50
2092
原创 总结C++中的STL
STL 即标准模板库,是 C++ 标准程序库的重要组成部分,包含常用数据结构和算法,体现了泛型化程序设计思想,基于模板实现,提高了代码的可复用性 2. deque 特性:双端队列,由多个固定大小的数组块组成,支持在两端快速插入和删除元素,同时也支持随机访问。 优缺点:优点是在两端插入和删除元素的时间复杂度为常数,适合需要频繁在两端操作的场景。缺点是随机访问的效率略低于 。 常用操作: 3. list 特性:双向链表,每个节点包含数据和指
2025-05-01 21:55:55
1082
原创 C语言中结构体的字节对齐的应用
字节对齐通过优化内存布局,平衡性能与空间效率。关键点:默认对齐规则由成员类型和编译器设置决定。调整成员顺序是最简单的优化手段。显式控制对齐适用于特殊场景(如硬件访问、协议定义)。跨平台开发需谨慎处理对齐差异。
2025-04-26 16:35:47
1567
原创 C语言里位操作的应用
右移有符号数的行为(算术右移还是逻辑右移)可能因编译器而异。:过度使用位操作会降低代码可读性,需添加详细注释。:嵌入式设备、内存敏感场景(如 IoT 设备)。:需要极致优化的代码(如图形处理、网络协议栈)。:移位操作超出变量范围会导致未定义行为(例如。:将多个小整数打包到单个变量中。:替代部分数学运算或逻辑判断。在32位整型中是合法的,但。:控制寄存器、操作外设。
2025-04-25 15:41:11
707
原创 IIC,SPI详细内容以及它们与串口通信的区别
双向数据线,用于传输数据。:时钟线,由主设备控制,同步数据传输。所有设备共享 SDA 和 SCL,通过区分设备。总线需外接(通常 4.7kΩ),以保证信号在空闲时为高电平。
2025-04-06 14:47:14
2140
原创 定时器TIM输出比较及其应用
在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域 PWM参数:频率 = 1 / TS 占空比 = TON / TS 分辨率 = 占空比变化步距//配置输出比较单元//配置强制输出波形函数//配置CCR寄存器的预装功能,即影子寄存器,就是写入的值不会立即生效,而是在更新事件才会生效//配置快速使能//外部事件时清除REF信号。
2024-10-06 00:08:00
1681
原创 stm32定时器中断和外部中断
在stm32中,用来统一分配中断优先级和管理中断的EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序支持的触发方式:上升沿/下降沿/双边沿/软件触发支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断(即不能PA1和PB1组合)通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒触发响应方式:中断响应/事件响应。
2024-10-05 16:06:58
3097
原创 PWR电源控制
其中PDDS==0,进入停机模式,PDDS==1,进入待机模式//恢复初省配置//后备访问//使能PVD功能//配置PVD的阈值电压//唤醒使能//进入停止模式//进入待机模式//标志位。
2024-10-02 22:34:48
1278
原创 C语言100道练习题打卡(1)
题目:一只青蛙要从第一级台阶开始,每次可以跳上一级或者两级,直到跳完所有的台阶。2)利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;例如:153是一个水仙花数,因为153 = 1的三次方+5的三次方+3的三次方。5)60万到100万之间时,高于60万元的部分,可提成1.5%;3)20万到40万之间时,高于20万元的部分,可提成5%;4)40万到60万之间时高于40万元的部分,可提成3%;6)高于100万元时,超过100万元的部分按1%提成。
2024-04-14 23:34:02
1739
7
原创 c++之STL案例分析---员工分组
1,在主函数中创建map容器,将员工部门编号作为key,具体员工作为value,放入到multimap容。3.在createWorker(vWorker)封装创建员工的函数谝历vector容器。1,在主函数中创建显示分组员工的函数。2,将员工分组的函数进行封装。
2024-04-11 12:52:25
619
原创 STL容器
set<T> st;//返回容器中元素的数目。//返回容器中元素的数目。//判断容器是否为空。//判断容器是否为空。//交换两个集合容器。//交换两个集合容器。总结:利用仿函数可以指定set容器的排序规则。统计set容器大小及交换set容器。功能描述:创建set容器以及赋值。set容器进行插入数据和删除数据。示例二:set存放自定义数据类型。利用仿函数,可以改变排序规则。示例1:set放置内置数据。
2024-04-07 01:00:34
1408
1
原创 STL容器(3)--deque+案例--评委打分
/删除[beg,end]区间的数据,返回下一个数据的位置。//在pos位置插入一个elem元素的拷贝,返回新数据位置。//在pos位置插入[beg,end]区间的数据,无返回值。//删除pos位置的数据,返回下一个数据的位置。//在pos位置插入n个elem元素,无返回值。//清空容器中所有的数据。//返回索引的idx所指的数据。//返回容器中最后一个数据元素。//返回索引的idx所指的数据。//在容器头部插入一个数据。
2024-04-05 10:40:55
823
原创 STL常用容器(2)---vector容器
/将v[begin(),end()]区间中的元素拷贝给元素。//如果容器变短,则末尾超出容器长度的元素被删除。//如果容器变短,则末尾超出容器长度的元素被删除。//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。//容器预留len个元素长度,预留位置不初始化,元素不可访问。//返回容器中元素的个数。//返回容器中最后一个数据元素。解释:未预留空间时,可访问的元素较多,预留空间后,该空间的元素不可访问,可访问的元素会变少。
2024-04-04 11:03:08
1079
原创 C++提高编程之STL初始
学习目标:vector中存放自定义数据类型,并打印输出1,存放对象//vector存放自定义数据类型public:int m_age;//向容器中添加数据//遍历数据it!= v.end();it++)cout
2024-04-02 00:24:45
1376
原创 C++之职工管理系统
职工管理系统可以用来管理公司内所有员工的信息主要利用C++来实现一个基于多态的职工管理系统公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责。管理系统中需要实现的功能如下:退出管理程序:退出当前管理系统增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号显示职工信息:显示公司内部所有职工的信息删除离职职工:按照编号删除指定的职工修改职工信息:按照编号修改职工个人信息。
2024-03-14 21:26:15
1883
2
原创 C++之继承
问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?总结:同名静态成员处理方式和非静态处理方式一样,只不过有两种访问方式。class 子类 :继承方式 父类1, 继承方式 父类2...子类继承父类后,当创建子类对象,也会调用父类的构造函数。问题:继承中同名的静态成员在子类对象上如何进行访问?从基类继承过来的表现其共性,而新增的成员体现其个性。一类是从 基类继承过来的,一类是自己增加的成员。问题:父类和子类的构造和析构顺序是谁先谁后?输入cd+空格 然后复制新目录。
2024-03-11 23:55:45
851
原创 C++之对象模型和this 指针,友元,和运算符重载
this指针指向被调用的成员函数所属的对象c++通过提供特殊的对象指针,this指针,解决上述问题。在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去。生活中你的家有客厅(Public),有你的卧室(Private)作用:重载关系运算符,可以让两个自定义类型对象进行对比操作。但是呢,你也可以允许你的好闺蜜好基友进去。
2024-03-11 00:33:02
1050
原创 C++之类(一)
优点1:将所有的成员属性设置为私有,可以自己控制读写权限优点2:对于写权限,我们可以检测数据的有效性//优点1:将所有的成员属性设置为私有,可以自己控制读写权限//优点2:对于写权限,我们可以检测数据的有效性//人类public://设置名字//获取姓名//获取年龄cout << "年龄输入有误,请重新输入" << endl;private://姓名 可读可写//年龄 只读 也可以写年龄//偶像 只写int main()Person p;//设置姓名。
2024-03-07 21:25:06
1278
原创 C++之结构体以及通讯录管理系统
语法:struct 结构体名{ 结构体成员列表};通过结构体创建变量的方式有三种:1,struct 结构体名 { 结构体成员列表 }//1,创建学生数据类型:包括姓名,年龄,成绩//自定义数据类型,一些类型集合组成一个类型//成员列表//姓名//年龄int age;//成绩char score;int main()//2,通过学生类型创建具体学生//给s1赋值,通过“.”访问结构体变量中的属性s1.name = "张三";
2024-03-03 22:48:34
1138
原创 c++之通讯录管理系统
通讯录是一个记录亲人,好友信息的工具系统中需要实现的功能如下:1,添加联系人:向通讯录中添加新人,信息包括(姓名,性别,年龄,联系电话,家庭住址)最多记录1000个人2,显示联系人:显示通讯录中所有的联系人信息3,删除联系人:按照姓名进行删除指定联系人4,查找联系人:按照姓名查找指定联系人信息5,修改联系人:按照名字重新修改指定联系人6,清空联系人:清空通讯录所有信息7,退出通讯录:退出当前使用的通讯录。
2024-03-03 22:43:52
1299
原创 C++之函数,指针
函数的定义一般有五个步骤:1,返回值类型2,函数名3,参数列表4,函数体语句5,return表达式语法:返回值类型 函数名 (参数列表)函数体语句;return 表达式;举例://函数的定义//加法函数,实现两个征信相加,并且将相加的结果返回int add(int num1, int num2)//定义中的num1,num2称为形参return sum;指针变量的定义语法:数据类型 * 变量名int main()//1,定义指针int a = 10;
2024-03-02 12:04:50
1055
1
原创 C++之数组
1,数据类型 数组名【数组长度】;2,数据类型 数组名[数组长度] = {值1,值2....}3,数据类型 数组名[ ] = {值1,值2};示例一:int main()//1,数据类型 数组名[ 数组长度 ]int arr[5];//给数组每个元素赋值//访问数据元素return 0;int main()//2,数据类型 数组名[数组长度] = {值1,值2....};i < 5;int main()
2024-02-29 18:31:55
1395
1
原创 c++之运算符,程序流程结构
总结:与if语句相比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间。注意:与while的区别在于do...while会先执行一次循环语句,再判断循环条件。解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置。出现在switch条件语句中,作用是终止case并跳出循环。作用:在循环体中再嵌套一层循环,解决一些实际问题。出现在嵌套语句,作用是跳出最近的内层循环语句。出现在循环语句中,作用是跳出当前的循环语句。作用:满足循环条件,执行循环语句。
2024-02-29 13:09:02
1186
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅