- 博客(33)
- 收藏
- 关注
原创 wps表格函数
DATEDIF函数,主要用于计算两个日期之间的天数、月数或年数。其返回的值是两个日期之间的年\月\日间隔数。Start_Date:为一个日期,它代表时间段内的第一个日期或起始日期;End_Date:为一个日期,它代表时间段内的最后一个日期或结束日期;Unit:为所需信息的返回类型。1、"Y":计算2个日期间隔的年数2、"M":计算2个日期间隔的月份数3、"D":计算2个日期间隔的天数4、"YD":忽略年数差,计算2个日期间隔的天数5、"MD":忽略年数差和月份差,计算2个日期间隔的天数。
2025-03-09 14:48:06
671
原创 二分法(算法)
思路:利用答案二分是最常考的一种方式,假设可以打包成每组x个花束,那么我们就能得知x*k<=sum的,我们只需要将所有的花相加得到sum,再判断其和x,k的关系即可,若是x*k<=sum,则表示x还能取得更多,更新l=mid,若是x*k>=sum,表示不能够满足,更新r=mid。我们要在一组升序的数组找一个数的下标,那我们肯定是先拿中间的与他进行比较,比较大小的判断,其实就相当于是这个性质,且这个性质满足二段性,将大于和小于我们要查找的值分为两段,而我们的查找结果就是。返回右边界,则当≥目标值时移动 r。
2025-03-06 19:20:42
670
原创 STL--map函数
map是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一的map容器来,并且可以通过键快速查找对应的值。map容器使用红黑树数据结构来实现,具有较快的插入、删除、和查找操作的时间复杂度O(longn)。Key:表示存储在map中的键的类型。T:表示存储这些map中的值的类型。Compare:表示用于比较键的函数对象的类型,默认为less,使用键类型的默认比较函数。Allocator:表示用于分配内存的分配器类型,默认为allocator。
2025-02-17 11:57:22
823
原创 c++算法常用库函数
p1和*p2是对a和b的内存内数据进行操作,改变了实参的数值,所以在调用函数结束后a和b数值进行交换了。memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度.想要初始化其他的值可以用fill()函数。c++中的memset()函数是初始化函数,作用是将某一块内存中的全部内容设置为指定的值,通常用来给新申请的内存做初始化工作。
2025-02-10 20:18:52
877
原创 C++全排列函数
feng5166说,“给定一个1到N的序列,我们定义1,2,3…N-1,N是所有可以与1到N组成的序列中最小的序列(在这个问题中,每个数字只能且应该只使用一次)。因此,很容易看出第二小的序列是1,2,3,…你应该告诉我由数字1到N组成的第M个最小序列。冯5166说:“我有三个问题要问你,如果你能解决,我就放公主走,否则你也当我的晚餐。每个测试用例由两个数字N和M组成(1<=N<=1000,1<=M<=10000)。输出序列时,您应该在两个数字之间打印一个空格,但不要在最后一个数字之后输出任何空格。
2025-02-10 20:02:12
515
原创 C++二分查找库函数
在二分查找中,upper_bound、lower_bound 和 binary_search 是三个常用的操作,C++标准库也提供了原生 API,它们都利用了二分查找,但用于解决略微不同的问题。返回值:如果数组中存在目标值,则 upper_bound 返回指向第一个大于目标值的元素的迭代器。用途:lower_bound 常用于查找数组中第一个大于等于目标值的元素的位置,或者获取可以插入该值而不破坏数组排序的位置。用途:仅用于检查序列中是否包含某个特定的值,不提供该值的位置信息。否则,返回false。
2025-02-10 17:09:33
228
原创 竞赛常用库函数——最值查找
## 时间复杂度为0(1),传入参数为数组时,时间复杂度为0(n),n为数组大小(min,max函数是在取最值操作时最常用的操作)max_element(st,ed)返回值地址[st,ed)中最大的那个值的地址(迭代器),传入参数为两个地址或迭代器。min_element(st,ed)返回值地址[st,ed)中最小的那个值的地址(迭代器),传入参数为两个地址或迭代器。###时间复杂度均为0(n),n为数组大小(由传入的参数决定),就是7),而且7左边都小于等于7,右边都大于等于7(*代表取出该地址的值。
2025-02-10 16:58:56
294
原创 C++竞赛常用库函数sort()
上面我们说到sort()函数可以自定义排序准则,以便满足不同的排序情况。使用sort()我们不仅仅可以从大到小排或者从小到大排,还可以按照一定的准则进行排序。比如说我们按照每个数的个位进行从大到小排序,我们就可以根据自己的需求来写一个函数作为排序的准则传入到sort()中。
2025-02-10 16:36:33
890
原创 类和对象——封装
封装是C++面向对象三大特性之一封装的意义:·将属性和行为作为一个整体,表现生活中的事物·将属性和行为加以权限控制在设计类的时候,属性和行为写在一起,表现事物语法:class 类名{ 访问权限:属性/行为};示例1:设计一个圆类,求圆的周长运行结果:示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号类在设计时,可以把属性和行为放在不同的权限下,加以控制访问权限有三种:1.public 公共权限类内可以访问 类外可以访问。
2025-02-07 00:32:47
247
原创 函数高级(C++)
在C++中,函数的形参列表中的形参是可以有默认值的。语法:返回值类型 函数名 (参数=默认值)运行结果:如果传入自己输入的数据,就使用输入的数据,如果没有,就用默认值。如果某个位置已经有了默认参数,那么从这个位置往后,从左到右必须有默认值如果函数声明有默认参数,函数实现就不能有默认参数,声明和实现只能有一个默认参数。
2025-02-06 20:17:02
393
原创 C++中的引用
引用:给变量取别名语法: 数据类型 &别名 = 原名运行结果:引用必须要初始化 int b;//错误的引用在初始化后,不可改变作用:函数传参时,可以利用引用的技术让形参修饰实参优点:可以简化指针修改实参4 引用做函数返回值作用:引用是可以作为函数的返回值存在的注意:不要返回局部变量引用局部变量储存在内存四区中的栈区,系统会自动释放它,若返回栈区的数据会导致发生错误。运行结果:注:系统默认在x64环境下进行编译,可以保留多次结果。若是在x86环境下编译只能保留一次结果。用法
2025-02-06 15:11:36
382
原创 程序的内存模型(c++)
c++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程。
2025-02-05 17:35:31
408
原创 数据结构——堆(C语言)
从这个节点开始构造最大堆;直到该节点前面所有分支节点都处理完毕,这样最大堆就构造完毕了。假设树的节点个数为n,以1为下标开始编号,直到n结束。
2025-01-25 22:31:04
2707
原创 数据结构——二叉树(C语言)
二叉树(binary tree)是一种非线性数据结构,代表“祖先”与“后代”之间的派生关系,体现了“一分为二”的分治逻辑。与链表类似,二叉树的基本单元是节点,每个节点包含值、左子节点引用和右子节点引用。每个节点都有两个引用(指针),分别指向左子节点(left-child node)和右子节点(right-child node),该节点被称为这两个子节点的父节点(parent node)。当给定一个二叉树的节点时,我们将该节点的左子节点及其以下节点形成的树称为该节点的。
2025-01-06 15:36:09
774
原创 数据结构——哈希表(C语言)
哈希表(hash table),又称散列表,它通过建立键key与值value之间的映射,实现高效的元素查询。具体而言,我们向哈希表中输入一个键key,则可以在 O(1) 时间内获取对应的值value。如图所示,给定 n 个学生,每个学生都有“姓名”和“学号”两项数据。假如我们希望实现“输入一个学号,返回对应的姓名”的查询功能,则可以采用图所示的哈希表来实现。我们先考虑最简单的情况,。在哈希表中,我们将数组中的每个空位称为桶(bucket),每个桶可存储一个键值对。因此,查询操作就是找到key。
2025-01-05 16:59:48
1080
原创 数据结构——双向队列(链表实现)
在队列中,我们仅能删除头部元素或在尾部添加元素。如图 5-7 所示,双向队列(double-ended queue)提供了更高的灵活性,允许在头部和尾部执行元素的添加或删除操作。对于双向队列而言,头部和尾部都可以执行入队和出队操作。换句话说,双向队列需要实现另一个对称方向的操作。为此,我们采用“双向链表”作为双向队列的底层数据结构。如图所示,我们将双向链表的头节点和尾节点视为双向队列的队首和队尾,同时实现在两端添加和删除节点的功能。
2025-01-03 11:22:34
425
原创 数据结构——队列的顺序存储实现(循环队列)
如果我们一开始将几个元素入队(入队在队尾入),然后再出队(出队是在队头出)那么front就会++,不会再指向0,然后再往队列里面插入元素,当rear=maxsize时如果还有元素要插入的话就会造成数组越界(从下标为0开始,最大下标为maxsize-1),但是front(front不为0)之前还有位置是空的还可以再插入数据,此时怎么将数据插入到下标为0的位置呢?动态扩容方便:在链式存储队列中,当需要增加新的元素时,只需动态地分配新的节点即可,无需进行大量数据的移动。,所以顺序存储结构还存储了队列的。
2025-01-02 21:42:39
837
原创 数据结构——队列的链式储存实现(C语言)
队列(Queue)是一种特殊的线性表,它具有先进先出(FIFO, First In First Out)的特性。在队列中,数据的插入操作被称为入队(Enqueue),数据元素的插入只能在队列的一端进行,这一端通常被称为队尾(Rear);相应地,数据的删除操作被称为出队(Dequeue),数据元素的删除只能在队列的另一端进行,这一端被称为队首(Front)。和。接下来讲解的是如图所示,我们可以将链表的“头节点”和“尾节点”分别视为“队首”和“队尾”,规定队尾仅可添加节点,队首仅可删除节点。
2025-01-02 18:29:28
342
2
原创 动态内存管理——C语言
目录1.为什么会有动态内存管理2.动态内存空间的开辟1、malloc2、free3、calloc4、realloc三、常见的动态内存的错误4.总结前言:动态内存是想要学会数据结构必不可少的一个知识,本章详细讲解了动态内存的概念和知识以及相关应用,让大家深刻认识和理解动态内存管理。1.我们一般的开辟空间方式:2.这样开辟空间的特点3.动态内存我们之间开辟数组空间和其他结构体空间时,都是在栈上进行开辟的,而动态内存空间的开辟是在堆上进行的。并且都申请内存的函数和释放函数都包含在头文件 :(1)返回类型和参
2024-12-02 17:16:50
614
原创 C语言——联合(共同体)
在C语言中,联合使用关键字union定义。与结构体一样,联合也包含多个成员,但所有成员共用一块内存。int i;float f;在上述示例中,定义了一个名为Datai(整型),f(浮点型),和str(字符串数组)。联合是C语言中强大且灵活的数据结构,可以帮助我们在不同场景下高效地管理和处理数据。在本文中,我们详细介绍了联合的定义、声明、初始化、使用、大小、联合与结构体的区别等,掌握这些知识,能够大大提高编写高效、可维护的C程序的能力。希望这篇文章对你理解和使用C语言中的联合有所帮助。
2024-11-30 16:23:09
839
原创 C语言——指针进阶
在对C语言指针进行初步入门之后,我们对指针——也就是地址有了基本的了解,如果还有对指针这部分知识不理解的同学可以看一下我写的关于指针入门的文章。
2024-11-25 17:48:00
1096
原创 移位操作符、位操作符(文图并茂)
本文详细介绍了二进制移位操作符(左移和右移)、位操作符(按位与、或、异或、取反)的工作原理,并通过实例演示如何利用这些操作获取整数的二进制序列以及在面试题中进行数字交换的方法。
2024-11-21 23:36:56
694
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人