数据结构与算法
文章平均质量分 77
科研程序开发
博客不仅仅是一个技术记录本,更是一个分享知识和经验的平台。毕设指导、程序开发、算法创新、专业助力!
接科研项目、毕业设计、课程设计开发指导!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
前端基础积累_新技术_Vue_React_H5_奇怪的BUG_面试_招聘
07: ES6 中的 箭头 函数 (=>) 详解。原创 2023-08-14 06:30:00 · 233 阅读 · 0 评论 -
大二上数据结构课设-航空客运订票系统c++
大二上数据结构课设:航空客运订票系统。原创 2023-08-06 13:00:00 · 634 阅读 · 0 评论 -
散列表(中)-实战
关于散列函数的设计,我们要尽可能让散列后的值随机且均匀分布,这样会尽可能地减少散列冲突,即便冲突之后,分配到每个槽内的数据也比较均匀。除此之外,散列函数的设计也不能太复杂,太复杂就会太耗时间,也会影响散列表的性能。关于散列冲突解决方法的选择,大部分情况下,链表法更加普适。而且,我们还可以通过将链表法中的链表改造成其他动态查找数据结构,比如红黑树,来避免散列表时间复杂度退化成 O(n),抵御散列碰撞攻击。但是,对于小规模数据、装载因子不高的散列表,比较适合用开放寻址法。原创 2023-02-26 21:25:11 · 144 阅读 · 0 评论 -
回溯算法理解
回溯算法的思想非常简单,大部分情况下,都是用来解决广义的搜索问题,也就是,从一组可能的解中,选择出一个满足要求的解。回溯算法非常适合用递归来实现,在实现的过程中,剪枝操作是提高回溯效率的一种技巧。利用剪枝,我们并不需要穷举搜索所有的情况,从而提高搜索效率。尽管回溯算法的原理非常简单,但是却可以解决很多问题,比如我们开头提到的深度优先搜索、八皇后、0-1 背包问题、图的着色、旅行商问题、数独、全排列、正则表达式匹配等等。原创 2023-02-22 23:39:12 · 326 阅读 · 0 评论 -
C++日期和时间编程总结
C++ 中可以使用的日期时间 API 分为两类:C-style 日期时间库,位于 头文件中。这是原先 头文件的 C++ 版本。chrono 库:C++ 11 中新增API,增加了时间点,时长和时钟等相关接口(使用较为复杂)。在 C++11 之前,C++ 编程只能使用 C-style 日期时间库,其精度只有秒级别,这对于有高精度要求的程序来说,是不够的。但这个问题在C++11 中得到了解决,C++11 中不仅扩展了对于精度的要求,也为不同系统的时间要求提供了支持。原创 2023-02-19 21:48:47 · 450 阅读 · 0 评论 -
c++基本编程题汇总
区别于 C++ 中的 array,array 分配的空间是静态的,分配之后不能被改变,而 vector 会自动重分配(扩展)空间。析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。:在类中,静态成员可以实现多个对象之间的数据共享,即静态成员是类的所有对象中共享的成员,而不是某个对象成员。在 C++ 语言中,,当我们使用基类的引用(或指针)调用一个虚函数时,将发生动态绑定,即函数运行的版本由实参决定,运行时自动选择函数的版本。原创 2023-02-19 21:47:24 · 173 阅读 · 0 评论 -
快速幂书写
需要2个cpu时钟。位运算只需要1个cpu时钟。除法需要40个cpu时钟。乘法需要4个cpu时钟。原创 2023-02-13 23:30:58 · 123 阅读 · 0 评论 -
sort自定义排序讲解
sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和堆排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并不是说它每次排序只选择一种方法,它是在一次完整排序中不同的情况选用不同方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,他会选择堆排序。也就是1,2,3,4排序。也可以自定义一个排序函数,改排序方式为降序什么的,也就是4,3,2,1这样。原创 2023-02-13 23:29:11 · 584 阅读 · 0 评论 -
vector的扩容原理、resize与reserve的区别
vector 存储的空间在内存中是连续的,如果 vector 现有空间已存满元素,在 push_back 新增数据的时候就要分配一块更大的内存,将原来的数据 copy 过来,接着释放之前的内存,再在新的内存空间中存入新增的元素。不同编译器对 vector 的扩容方式实现不一样,在 vs 中以 1.5 倍扩容,而在 gcc 中以 2 倍扩容,后面我们会看到以 1.5 倍扩容的方式效果更好。原创 2023-02-12 22:15:59 · 1282 阅读 · 0 评论 -
【C++笔记总结】C++中的内存管理是怎样的
● 动态内存的生命周期由程序员决定,使用非常灵活,但如果在堆上分配了空间,既有责任回收它,否则运行的程序会出现内存泄漏,频繁的分配和释放不同大小的堆空间将会产生内存碎片。栈的效率比堆高很多。栈是机器系统提供的数据结构,计算机在底层提供栈的支持,分配专门的寄存器来存放栈的地址,压栈出栈都有相应的指令,因此比较快。存储未初始化的全局变量和静态变量(局部+全局),以及所有被初始化为0的全局变量和静态变量,对于未初始化的全局变量和静态变量,程序运行main之前时会统一清零,即未初始化的全局变量编译器会初始化为0。原创 2023-02-10 08:23:27 · 126 阅读 · 0 评论 -
【C++知识点总结】c++中的左值引用与右值引用
为了解决浅拷贝问题,为类提供了自定义的拷贝构造函数和赋值运算符重载函数,并且这两个函数内部实现都是非常的耗费时间和资源(首先开辟较大的空间,然后将数据逐个复制),我们通过上述运行结果发现了两处使用了拷贝构造和赋值重载,分别是tmp拷贝构造main函数栈帧上的临时对象、临时对象赋值给s,其中tmp和临时对象都在各自的操作结束后便销毁了,使得程序效率非常低下。这里的移动指的是把临时量的资源移动给了当前对象,临时对象就不持有资源,为nullptr了,实际上没有进行任何的数据移动,没发生任何的内存开辟和数据拷贝。原创 2023-02-10 08:22:04 · 145 阅读 · 0 评论 -
C++中的虚函数理解
C++类的多态性是通过虚函数来实现的。如果基类通过引用或指针调用的是虚函数时,我们并不知道执行该函数的对象是什么类型的,只有在运行时才能确定调用的是基类的虚函数还是派生类中的虚函数,这就是运行时多态。比如说,派生类重写了基类的虚函数f1()之后,基类的指针就不仅可以调用自身的虚函数f1(),还可以调用其派生类的虚函数f1(),这是不是就可以多实现一些操作了呀。由基类继承而来的虚函数表中对应虚函数的地址(有点绕,多读一遍这一句就清楚了,这也是重写的含义所在吧,也就是覆盖掉基类部分虚函数的地址)。原创 2023-02-09 23:56:21 · 838 阅读 · 0 评论 -
new/delete与malloc/free的区别
delete或free仅仅是告诉操作系统,这一块内存被释放了,可以用作其他用途。但是由于没有重新对这块内存进行写操作,所以内存中的变量数值并没有发生变化,这时候就会出现野指针的情况。因此,释放完内存后,应该把指针指向NULL。new和delete使用时会分别调用构造函数和析构函数,而malloc和free只能申请和释放内存空间。● malloc使用时需要自己显示地计算内存大小,而new使用时由编译器自动计算。delete和free被调用后,内存不会立即回收,指针也不会指向空。● new和delete是。原创 2023-02-09 23:53:45 · 130 阅读 · 0 评论 -
C++ 中的四个智能指针
智能指针的一大优点就是可以在对象离开作用域时,自动释放该对象,所以就有了自定义析构对象的需求。原创 2023-02-09 23:52:36 · 588 阅读 · 0 评论 -
后缀表达式(逆波兰表达式)
第15个符号为 14 ,此时中缀表达式已经没有需要运算数字,所以栈中的符号依次出栈,现在为 2 9 * 3 + 2 10 3 - * 14 / -第14个符号为/ ,栈顶元素为*,优先级大于等于 / ,所以 /出栈 *进栈,现在为 2 9 * 3 + 2 10 3 - *第4个符号为 + ,目前栈顶符号 * 优先级大于等于 + ,所以出栈并输出 + 符号进栈,现在的总输出为 2 9 *第8个符号为 * ,栈顶符号 - 优先级不大于等于 * ,所以 * 直接进栈,现在为 2 9 * 3 + 2。原创 2023-02-08 22:30:05 · 411 阅读 · 0 评论 -
二叉树前中后层遍历代码模板
数据结构与算法原创 2023-02-08 22:26:13 · 145 阅读 · 0 评论
分享