- 博客(94)
- 收藏
- 关注
原创 二叉搜索树
场景1:小区无人值守车库,小区车库买了车位的业主车才能进小区,那么物业会把买了车位的业主的车牌号录入后台系统,车辆进入时扫描车牌在不在系统中,在则抬杆,不在则提示非本小区车辆,无法进入。场景2:商场无人值守车库,入口进场时扫描车牌,记录车牌和入场时间,出口离场时,扫描车牌,查找入场时间,用当前时间-入场时间计算出停车时长,计算出停车费用,缴费后抬杆,车辆离场。场景3:统计⼀篇文章中单词出现的次数,读取⼀个单词,查找单词是否存在,不存在这个说明第⼀次出现,(单词,1),单词存在,则++单词对应的次数。
2025-07-18 10:14:50
757
原创 C++:多态
多态是⼀个继承关系下的类对象,去调用同⼀函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象优惠买票。实现多态还有两个必须重要条件:必须是基类的指针或者引用调用虚函数被调用的函数必须是虚函数,并且完成了虚函数重写/覆盖。说明:要实现多态效果,第⼀必须是基类的指针或引用,因为只有基类的指针或引用才能既指向基类对象又指向派生类对象;
2025-07-18 10:14:22
779
原创 C++:继承
继承机制是⾯向对象程序设计使代码可以复用的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。下面有两个类Student和Teacher,Student和Teacher都有姓名/地址/电话/年龄等成员变量,都有identity⾝份认证的成员函数,设计到两个类里面就是冗余的。
2025-05-20 15:17:44
850
原创 模板的进阶
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。
2025-05-20 15:17:00
740
原创 stack和queue
queue是一种容器适配器,其中一端用于插入数据,另一端用于删除数据(先进先出)优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。优先队列类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。
2025-05-06 15:33:35
987
原创 算法课习题汇总(3)
设有N个选手进行循环比赛,其中N=2M,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。
2024-09-28 15:00:27
616
6
原创 vector的模拟实现以及oj题(2)
上篇博客介绍了大部分vector的接口,其中包括begin()、end()、const begin()、 const end()、size、capacity、reserve、empty、push_back、pop_back、insert、operator[],这篇博客将介绍剩下的部分接口,以及一些oj题解法和思路。
2024-09-28 13:50:31
1130
2
原创 string和oj题以及vector的接口介绍
vector的构造函数⁂ 代表重点vector的构造函数说明vector()⁂无参构造构造并初始化n个val拷贝构造使用迭代器进行构造vector的输出方式⁂ 代表重点vector的输出方式说明范围for从头到尾遍历返回vector中n处的元素的引用获取第一个数据位置的iterator 获取最后一个数据的下一个位置的iterator获取第一个数据位置的reverse_iterator, 获取最后一个数据的reverse_iterator。
2024-09-24 16:26:35
1101
19
原创 算法课习题汇总(2)
将正整数n表示成一系列正整数之和,n=n1+n2+…+nk(n1>=n2>=…>=nk,k>=1)。正整数n的这种表示称为正整数n的划分。思路:n表示待划分数,m表示最大减数。
2024-09-20 21:41:29
699
13
原创 string类的模拟实现以及oj题
上篇博客实现了string类的begin()、end()、构造函数、析构函数、c_str、size()、clear()、capacity()、[ ]、reserve()、push_back、append()、insert()、+=。这篇博客实现剩下的一些重要功能。
2024-09-20 21:41:08
1193
21
原创 算法课习题汇总(1)
求取数组中最大连续子列和。例如给定数组为A={1, 3, -2, 4, -5}, 则最大连续子列和为6,即1+3+(-2)+ 4 = 6。思路:利用两个for循环嵌套,使列出所以子列的可能性,找出最大子列思路:当子列之和小于0时,则该子列必定不为最大子列,直接将子列之和置空。
2024-09-13 14:16:54
386
3
原创 string(2)
字符串最后一个单词的长度思路:不能使用cin作为输入,因为cin在遇到空格时就会结束,可以使用getline代替return 0;
2024-09-13 11:30:41
638
1
原创 string(1)
C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
2024-09-08 13:32:07
1072
19
原创 力扣刷题(4)
时间复杂度为O(n^2),无法通过,因此需要其他的方法。解法一:最容易想出的方法就是将每个位置都进行比较。该解法的时间复杂度为O(n),因此可以轻松的通过。
2024-09-04 19:57:29
481
11
原创 内存管理、模块初阶、STL简介
class 类模板名// 类内成员定义// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误// 扩容++_size;是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。
2024-09-04 10:44:15
954
20
原创 类和对象以及内存管理
int main()// new/delete 和 malloc/free最大区别是 new/delete对于// 自定义类型除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的free(p3);delete p4;free(p5);return 0;new与mallocdelete与free。
2024-08-31 11:44:01
969
20
原创 类和对象(4)
因为初始化列表的顺序是按声明顺序进行的,因此我们可以知道_a2先进行声明,因此先计算_a2(_a1),由于_a1还未进行声明,因此_a2为随机值,又因为传入了1,不用使用缺省值,因此_a1为1。因此,答案为 1 随机值,选D。由于c为全局变量,因此c先调用构造函数,再进入main函数中,紧接着a,b再调用构造函数,最后d再调用构造函数,因此构造函数的调用顺序为 c a b d,因此选E。析构函数的调用顺序为局部到整体,并且先进行构造函数的后进行析构函数,因此析构函数的顺序为 b a d c,选B。
2024-08-28 13:28:33
2206
16
原创 C语言试题(含答案解析)
1.下面C程序的运行结果为()A.编译错误B.1C.0D.运行错误'A’的ascii码值为65,‘B’的ascii码值为66,‘B’
2024-08-23 19:36:58
4978
16
原创 外排序之文件归并排序实现
外排序是指能够处理极大量数据的排序算法。通常来说,外排序处理的数据不能一次装入内存,只能放在读写较慢的外存储器(通常是硬盘)上。外排序通常采用的是⼀种“排序-归并”的策略。在排序阶段,先读入能放在内存中的数据量,将其排序输出到⼀个临时文件,依此进行,将待排序数据组织为多个有序的临时文件。然后在归并阶段将这些临时文件组合为⼀个大的有序文件,也即排序结果。跟外排序对应的就是内排序,之前常见的排序,都是内排序,这些排序思想适应的是数据在内存中,支持随机访问。
2024-08-23 10:43:40
414
18
原创 快速排序的深入优化探讨
决定快排性能的关键点是每次单趟排序后,key对数组的分割,如果每次选key基本⼆分居中,那么快排的递归树就是颗均匀的满⼆叉树,性能最佳。但是实践中虽然不可能每次都是⼆分居中,但是性能也还是可控的。但是如果出现每次选到最小值/最大值,划分为0个和N-1的子问题时,时间复杂度为O(N^2),数组序列有序时就会出现这样的问题,但是当数组中有大量重复数据时,之前的快速排序方法就会比较慢,因此我们需要更进算法。
2024-08-20 16:25:17
299
11
原创 贪吃蛇游戏
Windows这个多作业系统除了协调应⽤程序的执行、分配内存、管理资源之外,它同时也是⼀个很大的服务中心,调用这个服务中心的各种服务(每⼀种服务就是⼀个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序,所以便称之为,简称API函数。WIN32API也就位平台的应用程序编程接口。245OK , //正常运行 KILL_BY_WALL , //撞墙 KILL_BY_SELF , //咬到自己 END_NOMAL //正常结束 };
2024-08-20 10:46:54
1070
15
原创 类和对象(3)
C++C++operatorthisoperator@Dateoperator-operator+++前置++后置++operator++C++后置++int前置++<<>>this<<cout。
2024-08-14 19:56:32
944
4
原创 计数排序以及排序总结
稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。排序方式平均情况最好情况最坏情况辅助空间稳定性冒泡排序O(n^2)O(n)O(n^2)O(1)稳定直接选择排序O(n^2)O(n^2)O(n^2)O(1)不稳定直接插入排序O(n^2)O(n)O(n^2)
2024-08-14 09:58:46
481
17
原创 类和对象(2)
⼀个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个。其次就是C++11以后还会增加两个默认成员函数,和。
2024-08-11 18:05:39
1126
4
原创 类和对象(1)
为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前面或者后面加或者开头,注意中这个并不是强制的,只是⼀些惯例,具体看公司的要求。中也可以定义类,兼容C中的用法,同时升级成了类,明显的变化是中可以定义函数,⼀般情况下我们还是推荐用定义类。定义在类⾯的成员函数默认为。访问限定符⼀种实现封装的方式,用类将对象的属性与方法结合在⼀块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。修饰的成员在类外可以直接被访问;和修饰的成员在类外不能直接被访问,和是⼀样的
2024-08-07 20:19:24
987
13
原创 直接插入排序和希尔排序
希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定⼀个整数(通常是gap=n/3+1),把待排序文件所有记录分成各组,所有的距离相等的记录分在同一组内,并对每一组内的记录进行排序,然后。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。得到下⼀个整数,再将数组分成各组,进行插入排序,当。的排序码顺序进行比较,找到插入位置。插⼊,原来位置上的元素顺序后移。时,就相当于直接插入排序。
2024-08-05 11:25:26
354
5
原创 二叉树的选择题
某⼆叉树的后序遍历序列与中序遍历序列相同,均为ABCDEF ,则按层次输出(同⼀层从左到右)的序列为:()设⼀课⼆叉树的中序遍历序列:badce,后序遍历序列:bdeca,则⼆叉树前序遍历序列为____。某⼆叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该⼆叉树中的叶结点数为( )⼀棵完全⼆叉树的结点数位为531个,那么这棵树的高度为( )⼀个具有767个结点的完全⼆叉树,其叶子结点个数为()二叉树的先序遍历的第一个结点为根结点,所以选A。对任何一棵二叉树,如果度为。
2024-08-05 08:59:37
911
原创 C++入门基础
定义命名空间,需要使用到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域这个域跟全局域各自独立,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。C++中域有函数局部域全局域命名空间域类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2024-08-02 19:09:50
2056
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人