- 博客(23)
- 收藏
- 关注
原创 哈希表的算法
1.这里的iter起到了相当于容器的作用(定位元素)map这里不像是数组可以通过下标来访问它,那么我们就把他拿出来,放到一个容器里暂时存放他,便于对他操作。= map.end()因为我们调用的是find函数 他找不到就继续找,这里就是这样搭配的。每一次找都要记录前面的一个,比如我现在已经记录了2当我到7的时候我要拿7和我已经存储的2来进行条件判断。就是当我到了4的时候我此时的目的就是找以前我是否记录了2 所以要不断的记录经过的值。这就是用了数组来记录出现次数,用哈希的思想映射过去,其中hash[
2024-01-24 18:37:22 625
原创 二分查找(折半查找)
【手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找-哔哩哔哩】 https://b23.tv/fFE6TRA。这其实是和刚开始的数组的左右闭合确定的,即就是right=N.size()还是N.size-1决定的。就是不用最原始的遍历数组 采用两个指针 分别指向两头然后不断的折半查找。low 和high取值到底是 mid+1 还是mid?至于其中的while(循环条件有没有=?
2023-11-03 15:19:37 34
原创 C++++++
CPlane(const char*n) :CRole(n) {}//目的是初始化基类成员CPlane的成员变量name CRole(n)是调用了基类构造函数。class Point(int x = 0, int y = 0) :_x(x), _y(y) {}//这里是用了初始化列表对坐标进行初始化。//operator的重载。
2023-10-27 15:14:24 44
原创 字符串的匹配 BF算法 KMP算法
当j=4时候 j其实就走了三步(j的数量少,便于记录走了多少步 这时候j虽然为4但是仅仅走了三步) 所以说i要回到原来的那个数字后一位 就是。如果不同就再往回到4 看16 和4的值是不是相同 直到找到相同的 如果到了j=0则就是前面没有前缀后缀相同的 也满足条件了 也进行赋值了。【最浅显易懂的 KMP 算法讲解-哔哩哔哩】 https://b23.tv/G6EapaA。BF算法每一次匹配不上 i 就会返回原来的下一位,j 回到第一位。比如这个例子如果16号的值和8号的值相同那么就是4。
2023-10-22 18:39:54 50 1
原创 顺序队列 23.10_15
因为顺序表示时候所开辟的空间是一个固定的大小区域,当出现了右边这种情况时候 我们引出了循环顺序队列来充分利用空间。则出现了另一个问题:队满和队空的标志都是front=rear。用求余的方法很巧妙的就实现了循环。用空一个的方法来 解决。
2023-10-15 17:18:03 34
原创 9/222 课堂上机
/这里这个格式后面的()代表了对count进行初始化,int类型默认的初始化为0。//这里很好,用里一个数组来记录每个元素出现的次数,进行自加。//这里是用来当出现了多个重复元素,只输出一遍(只输出重复的最后一遍),//因为这里考虑了负数所以进行了负数偏移,就是负数没法作为数组的下标,所以先加上一个数来代替。//这里用new开辟一块新的内存单元 后面记得用delete[]arr;if (arr[i] == arr[i + 1])//这里写得好。
2023-09-22 17:13:57 65
原创 (数据结构与算法)时间复杂度和空间复杂度 9/18
为了评判一个算法的好坏 因为在不同机器在不同的语言 在不同的编译器下等等等各种因素影响,我们不便进行评判,因此引出时间复杂度和空间复杂度。O(n)大O表示法:因为计算机的运算量很大所以。用以下的表来判断最高阶数学函数表示口诀:常对幂指数阶如果是嵌套循环呢?把内层和外层乘起来n^2只关心最内层与n的关系练习循环里面不是加而是✖️假设循环了x次2^x=n空间复杂度原地工作--算法所需的内存不变。
2023-09-18 16:33:28 38
原创 (数据结构) 链表 9/15
链表的结构定义:链表是由若干哥节点穿起来的,是逻辑上串联到一起的,每个节点处存储两部分信息,(第一部分是我们的数据信息,第二部分是我们称作。)插入的时候注意内存泄漏的问题,就是先指向谁,可能会丢失下一节点的地址。双向链表 就是在他的结构定义里面由两个指针,一个向前另外一个向后。删除操作:很简单只需要让head指向第三个节点即可。head节点指向最后一个节点。用来找到下一个链表节点)。插入:(都是用指针来操作的。利用虚拟节点来进行操作。以上是无头链表的思想。
2023-09-16 12:12:03 37 1
原创 (数据结构与算法)递归函数、顺序表和链表 9/13
的存储区(这里的连续用指针来实现) 2.一个整型的变量来标记我们数组的长度大小 3.也是一个整型的变量来标记我们存储了几个数据。顺序表因为是连续的所以在插入或者删除的操作过程中需要对后面的元素进行存储空间的移动。3.假设我们的递归函数是正确的,来设计本层的设计 即写出fn的关系式。1.给递归函数一个明确的语义信息 即fn具体代表了什么。2.设计边界条件 就是n==1时候 f(n)=?1.这里的f(n)代表了能吃n天的桃子数量。顺序表的结构操作:插入or 删除。顺序表的结构定义:1.一段。
2023-09-15 15:29:39 113
原创 2023/7/21 学习数据的存储(进阶)
V=5.0f ------>转化为二进制101.0------>1.01*2^2(小数点移动了两位)------>(-1)^0*1.01*2^2。//00000000000000000000000000010100 正整数的原 反 补 是一样的。存储E的时候注意是存储中间值+127(sake是占满11个比特的内存)小端字节存储:与大字节存储相反 把地位字节序的内容放在了高位地址处。V=9.5f-------->转化为二进制1001.大端字节存储:把数据的低位字节序的内容放在低地址处。
2023-07-23 10:59:28 38 1
原创 2023/7/9学习结构体
如果是地址则可以用箭头操作符。后面的P2是创建了结构体变量。2023/7/9学习结构体。创建标准类型(类似图纸)结构体指针->结构体变量。操作符 . 对结构体。
2023-07-09 14:21:21 30 1
原创 2023/7/6 学习C语言指针
指针变量里面存放的是一个地址,我们通过这个地址能够找到一个内存单元。指针是内存中一个最小单元的编号(1byte字节),也就是地址;在口语中我们的指针指的是 上面这个p 是指针变量。
2023-07-06 18:43:06 38 1
原创 2023/6/27 strlen和sizeof的理解和使用
首先用这两个函数的本质目的是求数组的下标问题(基本上),sizeof(arr)求得的是一个数组总共所占的字节,而strlen得到的是一个数组一共有多少位数,所以在求一共有多少位的时候sz=sizeof(arr)/sizeof(arr[ 0])还有一个不同是sizeof所计算的数组长度是把后面隐藏的结束标志/0也计算进去的,而strlen不会计/0。这就引出了"abc"双引号里面的最后自动会加一个/0,而'a','b'单引号里面没有自动加一个/0。f3又进去f3又是2*f4。所以2*2*2*2=16。
2023-06-27 16:34:54 43 1
原创 写一个三字棋(随机数的生成,以及选择的应用)
学完整体的main函数的逻辑后开始对game();写玩家下棋→生成棋盘(这部是为了展现出玩家到底下的哪一步)→电脑下棋→生成棋盘。循环里用函数写(实际上是在外面的写的逻辑)这样使整个main函数不必过于冗长,更加的清晰,然后再开始对胜利条件的判断也是循环直至有一方胜利或者平局所以也是用while(1)break 来。电脑下棋的时候用的是rand函数利用时间生成的随机数并且取余数%3就可以生成0~3的随机数。玩家下棋也是个死循环结构,直至玩家能够输入正确的坐标才能打破循环,最后写出判断平局的条件。
2023-06-27 12:07:36 47 1
原创 2023/6/25 数组的学习
有多少列 sz2=sizeof(arr[0])/sizeof[0][0]这里在函数内部求数组的长度是错误的,在主函数中arr代表着整个数组所占的内存长度。sizeof(数组名)这里的数组表示整个数组,计算的是整个数组的大小,单位是字节。求二维数组的有多少行 sz1=sizeof(arr)/sizeof[0]区别:1.&arr也是表示整个数组,取出的是整个数组的地址,2.arr是表示首数组的地址。arr[0][0]代表第一个数组的地址。arr[3][4] 在二维数组中。arr[0]代表着第一行的地址。
2023-06-25 20:06:34 29
原创 2023/6/23 函数的学习
★★:修改形参的值无法真正的影响到实参的数值,所以这时候就想办法用地址来改变实参,用地址真正的把形参和实参联系起来,用地址来改变实参的值,(传值调用)所以说如果想要真正改变实参的值时候传递地址,不需要改变实参 只需要调用实参来相加等等的运算这时候只需要传递数值过去!实参可以的类型:常量,变量,表达式,函数等 (无论实参是任何形式,实参必须要有具体的类型以便于实参的值传递给形参)因为数组占用的空间太大了所以在函数调用时候传递的时候只是传递了第一个数组的地址!所以这时候引出指针的方法用地址来改变实参的值。
2023-06-23 14:56:27 37
原创 2023/6/21 学习语句
上面用的"1,2,3,4,5,6,7,8,9"后面没有\0。这里用的字符串所以系统自动给后面加上\0来停止程序。strcmp()这个函数用来验证字符串是否是相等。优点:效率比一个一个找高,数据越多效率越高。strlen和sizeof 的区别。strlen()求长度函数。sleep () 缓冲。二分查找(拆半查找)
2023-06-21 17:38:33 36
原创 2023/6/20学习分支语句
不再执行continue下面的代码 跳过本次循环直接进行判断是否进行下次循环,如果yes则进入下一次v。注意要包含break,如果没有break跳出则一直顺着往下运行;switch case 语句也是用于分支 类似于if的分支。并没有输出5,continue跳出本次循环进入了下次循环;用sizeof总长度/一个数组的长度计算出 一共有几个数组。whlie循环同样可以嵌套if 和break来跳出循环;其次case后面必须是整形的常变量 n啥的不行。%02d 如果不够两位的话用0来补充成两位。
2023-06-20 16:07:08 23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人