自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(174)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 代码随想录算法训练营第一天|704. 二分查找、27. 移除元素

整数二分法的区间细节处理以及模版整理,浮点数二分法模版,快慢指针的应用

2023-12-27 21:23:13 1207 1

原创 【数据结构篇】第一篇——绪论

早期计算机只用于处理纯数值型问题,现代计算机经常处理非数值型问题。

2023-03-13 21:58:39 2033 2

原创 【数据结构初阶】第七篇——二叉树的顺序结构及实现(堆的向下,向上调整算法)

2.若目标结点的值比其父节点的值小,则交换目标节点与其父节点的位置,并将原目标节点的父节点当作新的目标节点继续进行向上调整。堆的删除,删除的是堆顶的元素,但是这个删除过程可并不是直接删除堆顶的数据,而是先将堆顶的数据与最后一个结点的位置交换,然后再删除最后一个节点,再对堆进行一次向下调整。数据插入时是插入到数组的末尾,即树形结构的最后一层的最后一个结点,所以插入数据后我们需要运用堆的向上调整算法对堆进行调整,使其在插入数据后仍然保持堆的结构。若小的孩子比父亲大,则不需处理了,调整完成,整个树已经是小堆了。

2023-02-01 18:56:24 6860 3

原创 【数据结构初阶】第六篇——二叉树的重要性质

假设该完全二叉树的层数为K,则该完全二叉树的前K-1层的结点总数为2K-1-1,若该完全二叉树是满二叉树,则该满二叉树的结点总数为2K-1,所以深度为K的完全二叉树的结点总数范围为:2K-1-1 < N

2023-02-01 12:48:32 4596 3

原创 【数据结构初阶】第五篇——栈和队列

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO入队列:进行插入操作的一端称为队尾,出队列:进行删除操作的一端称为对头。出队列,即释放队头指针指向的结点并改变队头指针的指向即可。队列中的每一个结点所占用的内存空间都是动态开辟的,当我们使用完队列后需要及时释放队列中的每一个结点。进行入栈操作前,我们需要检测栈的当前状态,若已满,则需要先对其进行增容,然后才能进行入栈操作。首先,我们需要用结构体创建一个栈,这个结构体需要包括栈的基本内容(栈,栈顶,栈的容量)。

2023-01-31 12:31:55 4087 2

原创 【数据结构初阶】第四篇——双向链表

本章讲的是带头双向链表。这里的头不存放任何数据,就是一个哨兵卫的头结点。//存储的数据类型//数据域//前驱指针//后继指针}ListNode;

2023-01-31 09:27:56 4040 2

原创 【数据结构初阶】第三篇——单链表

2.若只有一个结点,释放其结点,让其链表为空;2.判断第一个是否是其指定的位置3.如果是再来个头插,否则,找到pos的前一个位置posPrev;3.找出pos的前一个prev 4.将prev的next指向pos的next;创建新结点 2.新结点指向原链表 3.头指针指向新结点;1.创建新结点2.判断链表是否为空3.为空则让头指针指向新结点4.否则找到最后一个指针,指向新结点;链表打印就是遍历一遍链表,只不过这里的遍历和数组有点不一样,链表的遍历是判断当前位置是不是为。2.头指针指向第一个结点的next;

2023-01-30 17:11:50 3924 4

原创 【数据结构初阶】第二篇——顺序表

这样有一点好处就是,在静态分配时,当我想要存放顺序表的数据元素超过100时候则会产生错误溢出,而动态分配时,如果一旦超过了分配的空间大小,可以再重新分配一块内存空间,把旧的空间和所增加的数据元素转移到新申请的空间上,这样就不会产生溢出的问题了。静态顺序表的定长数组导致N定长,空间开少了不够用,开多了浪费,所以现实中都是使用动态顺序表,使用。因为顺序表所用的内存空间是动态开辟在堆区的,所以我们在使用完后需要及时对其进行释放,的办法来支持动态扩容,将顺序表变成了"可变长度"的,下面我将实现动态顺序表;

2023-01-29 23:06:20 1741 2

原创 4.力扣刷题之消失的数字

思路二:数组nums中有n个数,在这n个数的后面添加从0到n的每个整数,则添加了n+1个整数,共有2n+1个整数。在2n+1个整数中,消失的数字只在后面n+1个整数中出现一次,其余的数字在前面n个整数中和后面n+1个整数中各出现一次,即其余的数字都出现了两次。按位异或运算满足交换律和结合律,且对任意整数x都满足x^x=0和x^0=x;思路一:遍历数组nums,将数组中的元素加入到哈希集合中,然后依次从0到n检查是否在哈希集合中,如果不在则是我们要找的数字。

2023-01-29 15:41:31 1096 1

原创 3.力扣刷题之数组中数字出现的次数

由于这两个数不同,所以异或结果必然不等于0.根据这个特性,我们可以采用分组的方法解决这个问题,且分组要满足两个条件:1.两个相同的数必须在同一组;不难知道,二进制位是1,就表示1和6这个二进制位上的数不同。这就表示了1和6的二进制数在第一、二、三位上的数是不同的。这样就成功的将1和6分到了不同的组别中,而相同的数例如4,因为4和4的第一个二进制位是必然相等的,这样也就实现了将两个相同的数划分到同一组。解决此题首先要清楚异或的概念。相同的数异或为0,不同的数异或为1,,此外0和任何数异或等于这个数本身。

2023-01-29 14:12:22 1061 2

原创 【数据结构初阶】第一篇——算法性能分析

这里的大O是指什么?说到时间复杂度,大家都知道O(n),O(n^2),却说不清什么是大O.算法导论中说道:大O是用来表示上界的,当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。同样算法导论中给出了例子:拿插入排序来说,插入排序的时间复杂度为O(n^2).

2023-01-28 16:01:20 2202 3

原创 C语言入门(九)——编码风格

代码风格好不好就像字写得好不好看一样,如果一个公司招聘秘书,肯定不要字写得难看的,同理,代码风格糟糕的程序员肯定也是不称职的。虽然编辑器不会挑剔难看的代码,照样能编译通过,但是和你一个Team的其他程序员肯定受不了,你自己也受不了,写完代码几天之后再来看,自己都不知道自己写的是什么。代码主要为了写给人看的,而不是给机器看的,只是顺便也能用机器执行而已,如果是为了写给机器看那直接写机器指令就好了,没必要用高级语言了。代码和语言文字一样是为了表达思想,记载信息,所以一定要写的清楚整洁才能有效的表达。

2023-01-24 14:48:01 4699

原创 C语言入门(八)——数组

首先,define不仅用于定义常量,也可以定义更复杂的语法结构,称为宏定义。其次,define定义是在预处理阶段处理的,而枚举是在编译阶段处理的。

2023-01-23 19:38:36 2342 3

原创 C语言入门(七)——结构体

这一层看到的数据是结构体的两个成员x和y,或者r和A,如果改变了结构体的实现就要改变这一层函数的实现,但函数接口不改变,因此调用这一层函数接口的复数运算层也不需要改变。虽然结构体complex_struct的存储表示做了这样的改动,add_complex,sub_complex,mul_complex,div_complex这几个复数运算的函数却不需要做任何改动,仍然可以用,原因在于这几个函数只把结构体complex_struct当作一个整体来使用,而没有直接访问它的成员,因此也不依赖于它有哪些成员。

2023-01-20 14:18:03 2671 2

原创 2.力扣刷题之合并两个有序链表

本题是将两个有序的链表合并在一起,需要创造一个新的链表dummy,为了保证最终返回结果是新链表的开头,即令p=dummy,让p进行插入等一系列操作,同样令p1=l1,p2=l2,while循环每次比较p1和p2的大小,把比较小的节点接到结果的链表上,为了方便用到了虚拟头结点的技巧,即就是dummy节点,目的是为了简化边界情况,降低代码复杂度。

2023-01-14 15:09:12 1061 3

原创 1.力扣刷题之二分查找

写二分法,区间的定义主要是两种,左闭右闭即[left,right]或者左闭右开[left,right).二分法应该是我们刚学编程时最早遇到的算法题,思想很简单,代码也不困难,但是当中的边界问题,很容易出错。这些都是使用二分法的前提条件,当我们看到这些字眼的时候,就要想一下是不是能用二分法。下面就跟大家一起用这两种写法来解题。

2023-01-14 11:50:07 2599 3

原创 C语言入门(六)——循环语句

while语句do/while语句for语句break和continue语句嵌套循环goto语句和标号在前面的递归中,我们介绍了用递归求n!的方法,其实每次递归调用都在重复做同样一件事,就是把n乘到(n-1)!上然后返回结果。虽说是重复,但每次都做到稍微有一点区别(n的值不同),这种每次都有一点去别的重复工作称为迭代。我们每次使用计算机的主要目的之一就是让它做重复迭代的工作,因为把一件工作重复成千上万次而不出错是计算机最擅长的,也是人类最不擅长的。虽然迭代用递归来做就够了,但C语言提供了循环语句使迭代程序写

2023-01-12 16:29:48 1795 2

原创 C语言入门(五)——深入理解函数

return 语句增量式开发递归之前我们一直在main函数中使用return语句,现在是时候全面深入地学习一下。在有返回值地函数中,return语句的作用是提供整个函数的返回值,并结束当前函数返回到调用它的地方。在没有返回值的函数中也可以使用return语句,例如当检查到一个错误时提前结束当前函数的执行并返回:这个函数首先检查参数x是否大于0,如果x不大于0就打印错误提示,然后提前结束函数的执行返回到调用者,只有当x大于0时才能求对数,在打印了对数结果之后到达函数体的末尾,自然地结束执行并返回。注意,

2023-01-11 11:58:26 1393 3

原创 【C进阶】第十五篇——内存函数

memcpy函数是一个用于拷贝两个不相关的内存块的函数。memcpy函数会从src的位置开始向后复制count个字节的数据到dest的内存位置,并返回dest的首地址。memcpy函数在遇到'\0’的时候并不会停下来。若dest和src有任意重叠,复制的结果都是未定义的(未拷贝内容被覆盖)memcpy函数在实现的时候,不知道未来会被用来拷贝什么样的数据。所以参数的指针类型为void*(可接收任意类型指针)比如我们要将数组中的1,2,3,4拷贝到arr2数组中。int main()

2023-01-10 18:41:58 6610 3

原创 【C进阶】第十四篇——字符串函数

strlen函数是一个用于求字符串长度的库函数,它的参数是被求长度的字符串的起始地址,返回值是一个无符号整型.参数指向的字符串要以'\0'结束strlen返回的是在字符串中'\0'之前出现的字符个数(不包含'\0')注意函数的返回值为size_t,是无符号的(易错)举个例子,比如我们要求字符串"abcded"的长度int main()return 0;stcpy函数是一个用于拷贝字符串的函数,即将一个字符串中的内容拷贝到另一个字符串中(会覆盖掉原字符串内容)。

2023-01-10 16:18:32 6631 3

原创 【C进阶】第十三篇——指针详解

堆栈有栈顶指针,队列有头指针和尾指针,这些概念中的"指针"本质上是一个整数,是数组的索引,通过指针访问数组中的某个元素,经过学习我们在间接寻址那里看到了另一个指针的概念,这几个变量的内存布局如下图所示,在初学阶段经常要借助于这样的图来理解指针。这里的&是&i表示取变量i的地址,int *pi=&i;表示定义一个指向int型的指针变量pi,并用i的地址来初始化pi.我们讲过全局变量只能用常量表达式初始化,如果定义int p=i;

2023-01-10 11:58:40 8979 5

原创 C语言入门(四)——分支语句

其它编程语言对取模运算的规定各不相同,也有规定结果和除数同号的,也有不做明确规定的。,就变成了与它对称的另一个公式。逻辑或表示两个条件只要有一个为真,它们做逻辑或运算的结果就为真,只有两个条件都为假,逻。逻辑非的作用是对原来的逻辑值取反,原来是真的就是假,原来是假的就。行之外,这些公式都是每两行一组的,每组的两个公式就像对联一样:把其中一个公式中 的*这些运算符的两个操作数应该是相同类型的,两边都是整型或者都是浮点型可以做比较,但。函数是盖在上面的一张小纸,则函数中的语句块是盖在小纸上面的一张更小的纸。

2023-01-09 10:38:01 943 4

原创 C语言入门(三)——简单函数

我们不仅可以调用C标准库提供的函数,也可以定义自己的函数,事实上我们已经这么做了:我们定义了main函数。return 0;main函数的特殊之处在于执行程序时它自动被操作系统调用,操作系统就认准了main这个名字,除了名字特殊之外,main函数和别的函数没有区别。我们对照着main函数的定义来看语法规则:函数定义 → 返回值类型 函数名(参数列表) 函数体函数体 → {语句列表 }语句列表 → 语句列表项 语句列表项 ...语句列表项 → 语句。

2023-01-08 21:59:55 2573 1

原创 Unity3D——射击游戏(多地图,多人物,枪支切换,驾车,扔手雷等功能,堪比小型和平精英)

用鼠标来控制枪的方向,鼠标左键可以发射子弹,鼠标右键可以瞄准,W,S,A,D四个键分别是前后左右,空格键则是进行跳跃,G则是丢手雷,P则进行换武器,C进行蹲下,K丢下武器,R是换弹夹,右上角有地图,箭头则代表玩家的朝向,红色则代表敌人的数量。ESC游戏暂停,有三个选项,可以继续开始,也可以退出到菜单,也可以重新玩。链接:https://pan.baidu.com/s/1QZ9UGWPAHO1zRgW5qNCjcw?本款游戏是一个多场景,多角色,多枪支可选的枪战游戏,类似于市面上的小型穿越火线。

2022-12-27 18:28:19 1855 11

原创 Unity3D——第一人称FPS生存游戏(resident zombies)

UGUI组件则有暂停,结束游戏,音效设计等Button设计,有受伤,血条,子弹数量的Image设计,血条,音量调节的Slider设计,Action Key,Action Text等InputField设计等。:飞机的轰鸣声,敌人受伤和玩家受伤的声音,旁边两座高山,走进去会有山谷空明的声音,出来则消失,旁边还有篝火燃烧的声音。场景中运用到的子弹,篝火,药包,UI,敌人等基本都是使用预制体,可以直接复用到另一个场景。一所简陋的医院,场景的搭建是来自基于官网下载的免费资源,在此基础上将场景进行了修改扩大。

2022-12-27 13:38:02 1620 9

原创 C#编程基础(万字详解,这一篇就够了)

C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。C# 是由 Anders Hejlsberg 和他的团队在 .Net 框架开发期间开发的。C# 是专为公共语言基础结构(CLI)设计的。CLI 由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。现代的、通用的编程语言。面向对象。面向组件。容易学习。结构化语言。它产生高效率的程序它可以在多种计算机平台上编译。

2022-12-16 17:19:54 57206 14

原创 【C进阶】第十二篇——指针(二)(函数指针+函数指针数组+回调函数)

整型指针是指向整形的指针,数组指针式指向数组的指针,其实函数指针就是指向函数的指针()的优先级要高于*一个变量出去了变量名,便是它的变量类型一个指针变量除去了变量名和*,便是指针指向的内容的类型{}int main(){//取出函数的地址放在函数指针p中return 0;}那么,函数指针p的类型我们是如何创建的呢?首先,p是一个指针,所以必须先与 * 结合,而( )的优先级高于 * ,所以我们要把 * 和p用括号括起来,让它们先结合。

2022-12-13 18:58:34 5601 3

原创 【C进阶】第十一篇——指针(一)(字符指针+指针数组+数组指针+指针参数)

我们已经知道了,整型指针是指向整型的指针,字符指针是指向字符的指针,那么数组指针应该就是指向数组的指针了.整型指针和字符指针,在使用时只需取出其整型/字符型的数据的地址,并将地址存入整型/字符型指针即可.int main(){//取出a的地址存入整型指针中//取出ch的地址存入字符型指针中return 0;}数组指针也是一样,我们只需取出数组的地址,并将其存入数组指针即可。int main(){//&arr - 数组的地址return 0;}

2022-12-13 18:33:04 5651 3

原创 【C进阶】第十篇——数据在内存中的存储

char //字符数据类型short //短整型int //整型long //长整型long long //更长的整型float //单精度浮点数double //双精度浮点数1.使用这个类型开辟内存空间的大小(大小决定了使用范围)假设我们在内存中定义了两个变量,A变量是int类型,B变量是char类型。

2022-12-13 14:13:25 4674 3

原创 【C初阶】第九篇——函数栈帧的创建与销毁

在我们前期的学习编程过程中,我们会遇到许多诸如:"局部变量是如何创建的?","形参和实参有什么关系?","为什么局部变量是随机值?","函数调用时如何调用的?"等等的一些问题,今天就带大家一起了解vs2013编译器下的函数栈帧的创建于销毁,当然不同的编译器底下的这个过程有略微的差异,但大体上相同.

2022-12-13 11:34:27 4121 3

原创 【C初阶】第八篇——结构体

结构体是一些值的集合,这些值称为成员变量.结构的每个成员可以是不同类型的变量.有了结构体类型,那如何定义变量,其实很简单.{int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//初始化:定义变量的同时赋初值。struct Stu //类型声明{//名字int age;//年龄};//初始化{int data;//结构体嵌套初始化//结构体嵌套初始化。

2022-12-12 20:41:16 4239 3

原创 【C初阶】第七篇——指针

在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元.因此,将地址形象化称为"指针",意思是通过它能找到以它为地址的内存单元.那么我们可以这样理解:在内存中,内存被细分为一个个大小为一个字节的内存单元,每一个内存单元都有自己对应的地址.可以将这些内存单元看作是一个个房间,将内存单元(房间)对应的地址形象地看成房间的门牌号。

2022-12-12 18:20:11 4370 2

原创 【C初阶】第六篇——操作符详解

逻辑反操作- 负值+ 正值& 取地址sizeof 操作数的类型长度(以字节为单位)~ 对一个数的二进制按位取反-- 前置、后置--++ 前置、后置++* 间接访问操作符(解引用操作符)(类型) 强制类型转换。

2022-12-12 18:14:22 3999 1

原创 【C初阶】第五篇——数组

在arr1中,在内存中有4个数组元素,除了字符'a','b','c'之外,还有一个字符串的结束标志'\0',而在arr2中,则只有字符'a','b','c',对这两个字符串进行输出.数组的下标规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1,所以数组的下标如果小于0,或者大于n-1,就会导致数组越界访问问题,超出了数组合法的空间访问.C语言本身是不做数组下标的越界检查的,编译器也不一定会报错,但是编译器不报错,并不意味着程序就是正确的,所以程序员写代码时,最好自己做越界的检查.

2022-12-12 15:31:24 4359 1

原创 C语言入门(二)——常量,变量和表达式

定义一个变量,就是分配一块存储空间并给它命名;给一个变量赋值,就是把一个值保存到这块存储空间中。

2022-12-11 09:51:41 1789 3

原创 C语言入门(一)——程序的基本概念

程序(Program,比如解方 程,,比如查找和替换文档中的某个单词。从根本上说,计算机是由数字电路组 成的运算机器,只能对数字做运算,程序之所以能做符号运算,是因为符号在计算机内部也是用数字表示的。此外,,声音和图像在计算机内部必然也是用数字表示的,这些数字经过专门的硬件设备转换成人可以听到、看到的声音和图像。程序由一系列基本我们用过的任何一个程序,都是由这几类指令组成的,程序是虽然很复杂,但是编写程序能够用到的指令只有这简单的几种,这中间的东西需要我们来填充,所以编写程序就是一件很复杂的工作.

2022-12-10 17:43:35 3361 3

原创 C++学习笔记(十九)——stack和queue的模拟实现

是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高.deque底层结构它并不是一段连续的空间,而是由多个连续的小空间拼接而成,相当于一个动态的二维数组.如下图:deque的迭代器。

2022-12-10 12:39:25 871 1

原创 C++学习笔记(十七)——list的模拟实现

list迭代器类,实际上就是对结点指针进行了封装,对其各种运算符进行了重载,使得结点指针的各种行为看起来和普通指针一样。(例如,对结点指针自增就能指向下一个结点)

2022-12-10 11:09:00 646 1

原创 C++学习笔记(十八)——stack和queue

stack是一种先进后出的容器.stack是一种容器适配器,专门用在具有后进先出(last-in first-out)操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作.stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出stack的底层容器可以是任何标准容器,这些容器需要满足push_back,pop_back,back和empty几个接口的操作。

2022-12-10 11:08:13 589 4

原创 C++学习笔记(十六)——list

list本质是一个带头的双向循环链表list是一种可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立结点当中,在结点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似,最主要的不同在于forward_list是单链表,只能进行单方向迭代。与其他容器相比,list通常在任意位置进行插入、删除元素的执行效率更高。

2022-12-09 18:54:13 521 1

主要包含 1.软件项目建议书 2.可行性分析报告 3.软件开发计划书 4.软件需求规格说明书 5.软件概要设计说明书 6.软件相

主要包含 1.软件项目建议书 2.可行性分析报告 3.软件开发计划书 4.软件需求规格说明书 5.软件概要设计说明书 6.软件相依设计说明书 7.用户操作手册 8.软件测试计划 9.软件测试分析报告

2022-12-14

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除