刷题记录--算法--简单 上面的图表现出time=5时走出了一个往复,用除法体现5/3=1(这里必须是除3也就是n-1,因为向右前进时i只走了三步),剩下的两部5%3=2,所以n=4,time=5时,i走了一个往复,先向右走到4,然后调头走到2,这里的5/3=1的1表示的i走完一个全程(全程指的是1到4,或者4到1,不管方向,总之1代表走完一个全程,就是这样凸(艹皿艹 )这特么的这么难写,凸(艹皿艹 )啊);接下来看看n,n分为1两种情况,n
C++基础之类二(六个成员函数、构造及析构)待完善 构造函数与析构函数分别管理类对象的初始化与释放构造函数没有返回值,名称与类名相同,可以重载,也可以缺省,不显示定义,编译器会自动生成无参的构造函数,但是编译器生成的对内置类型不处理,对自定义类型会调用它的默认构造函数。默认构造函数时指无参或者全缺省的构造函数,一个类中有且只有一个默认构造函数。析构函数与无参无返回值,函数名是类名前加~,一个类有且只有一个析构函数,不显式定义时,编译器会自动生成,但编译器生成的只能完成有限的工作,对于内置类型不处理,对于自定义类型会调用它的析构函数。
C++基础之类二(类的实例化,This指针) 之前学过了类,但在编程中类无法直接使用,需要将类进行实例化后才能使用,现在就来看看类的实例化是什么?用类创建对象的过程叫做类的实例化,类可以抽象为虚拟的图纸,对象是按照图纸创建好的类,创建的过程就是类的实例化。对象是按照类创建的实体,所以对象的功能是按照类的设计,但两者之间还有很多不同点有内容的类:看一下下面的代码,它的大小应该是多少?看一下其中的元素,一个成员函数,两个成员变量,32位系统的情况下,成员函数的地址是4个字节,char类型是1字节,int类型是4字节,按照内存对齐的规则,这个类应该是1
C++基础之类一(面向对象,类的定义,类的作用域) 从类开始学习C++,是因为类很好的体现了C++的面向对象的特性,类是C语言的struct升级版本,除了包含程序所需的成员变量外,还增加了该成员的成员函数,实现了一个完整的对象。需要注意类的定义并不是创造了类的实体,而是定义类的图纸,创造实体时按照图纸进行创建。");exit(-1);
C++基础三-内联函数 内联函数声明与定义不能分离,是因为编译时符号表中不会有内联函数的地址,内联函数只能在定义的文件中使用,链接时声明文件没有内联函数的地址,所以会出现无法解析外部符号的错误;所以内联函数的声明和定义一定要放在一起。
数据结构初阶之二叉树(5) 之前学习过二叉树的遍历,其实遍历的思路还可以用作二叉树的创建,假设我们有以下的二叉树前序遍历的结果"abd##eh##i##cf##g##",把这个字符串还原为一个二叉树。二叉树的销毁需要依次销毁节点,所以根节点应当是最后销毁的,所以最符合的是后续遍历的顺序(左节点--->右节点--->根节点)。完全二叉树只有最后一层才会出现空,且空后不会出现数据,所以判断完全二叉树,最好的方法是使用层序遍历,判断空后是否出现元素。层序遍历是按照二叉树每一层进行遍历,进行层序遍历需要使用队列,利用队列先进先出的特性。
数据结构初阶之二叉树(4) 力扣 刷题 递归 链表 二叉树 1. 单值二叉树。Oj链接2. 检查两颗树是否相同。OJ链接3. 对称二叉树。OJ链接4. 二叉树的前序遍历。 OJ链接5. 二叉树中序遍历 。OJ链接6. 二叉树的后序遍历 。OJ链接7. 另一颗树的子树。OJ链接
数据结构初阶之顺序表和链表 思路1,原地删除,该思路是在原来的链表中,对值为val的节点进行删除,主要考虑的是首节点的值为val,以及非首节点的值为val两种情况,首节点的值为val时,不断的移动首节点,直到找到第一个值不为val的节点,非首节点的值为val时,该节点被释放,所以需要两个指针,cur进行释放,prev指针进行定位,当该节点值不为val时,两个指针同时向前移动一步。上图红色箭头指向的节点就是开始逆置的节点,奇数个数节点的链表就是中间的节点,偶数个数的链表就是中间两个节点中靠后的一个,这里可以使用快慢指针实现。
数据结构初阶之算法的时间复杂度和空间复杂度 任何一段代码运行时都需要耗费时间与空间(内存),所以一段代码可以从时间与空间的角度来判断它的好坏,因此就有了时间复杂度与空间复杂度。时间复杂度主要是衡量一个代码运行的快慢,空间复杂度主要是衡量一段代码运行时需要多少额外的空间,不过因为现在的内存空间够大,所以空间复杂度显得不是很重要。
进阶C语言之数据在内存中的存储 C语言的基本内置类型名称解释占据空间(单位字节)char字符1short短整型2int整型4long长整型4(32位)/8(64位)long long长长整型8float浮点型4double双精度浮点型8类型的意义:一、决定了开辟的内存空间的大小。二、决定了看待内存空间的角度(存入和读取数据的方式)。
初学C语言之结构体 ;};int main(){struct peo p1 = { "张三", "12345678901", "男", 188 };struct stu s = { {"李四","98765432101","女",166},37 };return 0;}
初学C语言之操作符详解 表达式2:表达式3,如果表达式1的值为真,那么计算表达式2的值并作为整个表达式的值,如果1为假,那么计算表达式3的值并作为整个表达式的值。规则:判断表达式的是否为真(C语言中0为假,非0为真),&&判断的是当两个值都为真时表达式的结果为真,若其中一个为假则表达式的值为假。(2)表达式,虽然a++的结果为1,但因为后置++,先使用再自增,所以表达式中得到的值为0,促发短路运算,后面没有再计算。(3)表达式,虽然a还是0,但前置++,a先进行了自增然后使用,所以表达式中的得到1,因此进行了后面的计算。
初学C语言系列之数组 上面这段代码的运行后,并没有将数组重新排序,根本原因是因为,数组传参是传递的是指针,因此BoboSort函数内的sz计算的是指针除以指针的大小结果为1,sz-1=0,i必须在小于0的时候才能进入循环,i的初始值为0,所以不能进入循环。从上图的运行结果发现,数组中元素的地址是连续的,而且是间隔相等的,所以数组在内存中是连续存储的,下标实际上就是记录每个元素地址位置的步长。上表可以看到,10个元素的数组,冒泡排序需要9趟,每次的对数是从9开始递减的,所以可以得出趟数=元素个数-1,对数=元素个数-趟数。