- 博客(41)
- 收藏
- 关注
原创 二叉搜索树介绍
所以综合而言⼆叉搜索树增删查改时间复杂度为: O(N)那么这样的效率显然是⽆法满⾜我们需求的,后续还会继续讲解⼆叉搜索树的变形,平衡⼆叉搜索树AVL树和红⿊树,才能适⽤于我们在内存中存储和搜索数据。
2024-11-17 16:01:20 514
原创 C++中的stack和queue介绍
stack的介绍堆栈是一种容器适配器,专门设计用于在后进先出(LIFO)的上下文中操作,其中元素仅从容器的一端插入和提取。queue的介绍队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列.底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。
2024-10-28 20:59:13 886
原创 C++中的list介绍(常用函数)
list的文档及介绍。list中的接口比较多,此处类似,只需要掌握如何正确的使用,然后再去深入研究背后的原理,已达到可扩展的能力。以下为list中一些常见的重要接口。
2024-10-22 14:59:06 697
原创 C++中的vector介绍(常用函数)
vector的文档介绍vector是序列容器,表示可以改变大小的数组。(constructor)构造函数声明接口说明vector()(重点)无参构造构造并初始化n个val(重点)拷贝构造使用迭代器进行初始化构造int main()//无参的构造//n个val的构造//拷贝构造//迭代器区间构造return 0;
2024-10-15 14:48:32 1019
原创 C++中的string介绍(常用函数)
在构造时,将资源的计数给成1,每增加一个对象使用该资源,就给计数增加1,当某个对象被销毁时,先给该计数减1,然后再检查是否需要释放资源,如果计数为1,说明该对象时资源的最后一个使用者,将该资源释放;C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP。当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。
2024-08-17 17:12:35 787
原创 C++--类和对象(下)
• 尽量使⽤初始化列表初始化,因为那些你不在初始化列表初始化的成员也会⾛初始化列表,如果这个成员在声明位置给了缺省值,初始化列表会⽤这个缺省值初始化。• 内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使⽤,那么可以考虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其他地⽅都⽤不了。,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。
2024-07-26 10:43:04 1041
原创 C++--类和对象(中)
析构函数与构造函数功能相反,析构函数不是完成对对象本⾝的销毁,⽐如局部对象是存在栈帧的,函数结束栈帧销毁,他就释放了,不需要我们管,C++规定对象在销毁时会⾃动调⽤析构函数,完成对象中资源的清理释放⼯作。传值返回会产⽣⼀个临时对象调⽤拷⻉构造,传值引⽤返回,返回的是返回对象的别名(引⽤),没有产⽣拷⻉。
2024-07-25 13:36:23 844
原创 C++---类和对象(上)
• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。这里我们就用Date类来做个样例class Datepublic://成员函数private://成员变量int _year;int _month;int _day;
2024-07-23 17:48:53 697
原创 插入/选择/希尔/堆/冒泡/快速/归并/计数排序——大集合
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
2024-07-19 12:22:23 1859
原创 C++入门知识
• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace zx//关键字加命名空间的名字int a = 10;int val;• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量。int a = 10;int a = 20;• C++中域有函数局部域,全局域,命名空间域,类域;
2024-07-10 12:25:39 817 1
原创 判断是否为完全二叉树
1.完全二叉树的概念:对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。2.思路:可以采用层序遍历的方法,把节点依次放入队列中,空节点也要放进去,在出队列的时候,出到空了,就开始遍历整个队列,如果整个队列都是空节点,则是完全二叉树,遇到非空节点,就不是完全二叉树。后面非空节点一定是前面非空节点的孩子,前面非空节点已经出了队列,那么后面的非空节点肯定也已经入了队列。这里我没有写队列的数据结构,我是写好了,直接拿来用的。
2024-07-07 19:20:25 162
原创 Topk问题
从N个数中,找出最大的前K个数,我们这里给10000个数,找出最大的前10个。个数,与堆顶的数据进行比较,比堆顶的大,就代替堆顶的数,再使用。在完成代码后,我们如何确保我们找出来的数就是最大的那几个?我们可以自己在数据文件中添加数据,明显的比原来的数据大。b.建一个K个数据的小堆,从数据文件中遍历。a.打开一个文件,将数据写入文件中。说明我们成功找出了最大的K个数。
2024-07-05 21:13:19 379
原创 C语言求完全平方数(不一样的方法)
第一种方法:使用sqrt()函数,判断sqrt() == (int)sqrt()是否相等。第三种方法:使用奇数平方和的规律,奇数平方和等于奇数个数的平方和。第二种:用小于n的数i除以n,判断i* i==n是否相等。求完全平方数,我们经常使用的有两种方法。
2024-06-15 10:17:12 1326 2
原创 用栈实现队列(C语言)
如果我们要出数据的话,我们根据队列的出入原则,应该出数据1,所以我们可以把pushst里面的数据全部倒入到popst中,那么popst中的数据为(1,2,3,4).pushst拿来入数据,popst拿来出数据,刚好可以满足队列的需求。想再出数据时,已经没有数据了,我们需要从pushst里再次倒入数据(5,6),先对popst判空,如果为空,我们需要倒入数据后,再删除数据。根据题目,我们可以知道,我们需要用两个栈来实现队列,先要对连个队列进行销毁,再对两个栈的结构体销毁。两个栈为空,队列才为空。
2024-05-25 17:51:00 1074
原创 随机链表的深拷贝
val为11的节点的前一个旧节点的random指针指向的是val为3的旧节点。因此,val为11的新节点的random指针指向的是val为3的旧节点的next指针,也就是val为3的新节点。新节点的next指针指向前一个旧节点的next指针,新节点的random指针指向前一个旧节点的random指针的next指针,值找到所对应的节点,记录该节点的位置,就像数组一样,新链表中的。并连接起来,在链接的过程中,新节点的val值等于前一个节点。解题思路二:首先在旧链表中的每一个节点后创建一个新节点,
2024-05-11 19:02:39 301 1
原创 环形链表知识点
原理:当慢指针走到圆环的第一个节点,这时快指针已经进入到了圆环当中,慢指针走一步,快指针走两步,假设慢指针走到圆环当中的第一个节点时,慢指针和快指针相差N步。按照刚才的分析方法,我们可以知道慢指针走一步,快指针走3步,那么快指针和慢指针之间相差的步数就是N+1-3 = N-2;因此,当慢指针走一步,快指针走3步,不会被追击上的条件不成立,因此,当慢指针走一步,快指针走3步时,一定会被追击上。但是,如果C是偶数,则C-1是奇数,又会造成N是奇数,就会一直追击,则追不上。如果N为偶数,则在第一轮时,就追上了。
2024-05-05 17:47:11 670
原创 C语言二分查找的区间问题
什么是二分查找呢?二分查找:在有序数组中查找某一特定元素的搜索算法。二分查找又称折半查找,通过将数组折半,用中间值和查找值作比较,多次使用,直到找到要查找的值。注意:二分查找的前提是,数组必须是要的。
2024-05-03 21:15:33 319 1
原创 程序中的编译连接介绍
链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。汇编是将汇编代码转换成可执行的机器指令,每⼀个汇编语句⼏乎都对应⼀条机器指令。就是根据汇编指令和机器指令的对照表⼀⼀的进⾏翻译,也不做指令优化。将源代码程序被输⼊扫描器,扫描器的任务就是简单的进⾏词法分析,把代码中的字符分割成⼀系列。接下来语法分析器,将对扫描产⽣的记号进⾏语法分析,从⽽产⽣语法树。静态语义分析通常包括声明和类型的匹配,类型的转换等。在ANSI C的任何⼀种实现中,存在两个不同的环境。,生成相应的汇编代码文件。
2024-04-04 15:57:19 1051 1
原创 C语言中的文件和文件操作
1.1文件存储在磁盘(优盘)上的文件就是文件。文件分为程序文件和数据文件(从文件功能的角度来分类的)。1.2程序文件以.c或者.obj或者.exe等结尾的文件就是程序文件。例如:源文件,目标文件,可执行程序等…1.3数据文件数据文件不一定是程序文件,而是程序运行时读写的数据,比如程序运行时需要从中读取数据的文件,或者需要输出内容的文件。数据文件又分为二进制文件和文本文件。1.4文件名文件名是文件的文件标识,以便用户识别和使用。
2024-04-04 13:25:18 909 1
原创 C语言结构体介绍
最后,结构体的总大小是成员当中最大对齐数的整数倍,结构团体的最后一个成员的地址在偏移量为8的地址处,共9个字节,不是最大对齐数的整数倍,因此,结构体的总大小为12个字节。结构体的整体大小就是最大对齐数(包括了嵌套的结构体成员)的整数倍的地址处。a占三个比特位,b占4个比特位,还剩一个比特位,不够放c,因此,再申请一个字节的空间放c,还剩下三个比特位,不够放d,因此再申请一个字节。其次,int类型的变量的对齐数是4,小于8,因此,对齐数就是4,要在偏移量为4的整数倍的地址处存放。因此放在偏移量为8的地址处。
2024-03-27 16:15:59 2151 1
原创 整数和浮点数在内存中的存储
(2)在存储的过程中,E是一个无符号整型,8个bit位的话,大小就在0~~255之间,11个bit位的话,大小就在0~2047,但是科学计数法中,指数可以是负数的,所以,在8位时,指数是先+127后,再存储到内存中的,在取出的时候,会先将指数-127,在进行计算的。(1)在存储的过程中,M是需要写成1.XXXXXX的形式,但是在存储的过程中,我们只需要将小数点后面的小数位进行存储,不用存储小数点前面的1,在取数据的时候,再返回1就行了,这样可以提高数据存储的精度,32位上我们就可以存储24个有效数字了。
2024-03-22 16:26:27 846 2
原创 C语言字符函数、字符串函数、内存函数总结
在拷贝过程中遇到’\0’时不会停止的,如果src后面的内存和dest后面的内存重叠,结果都是未定义的。函数是用来一个字符串是否存在与另一个字符串中,如果存在,则返回字符串在另一个字符串中第一次出现的位置。```strcmp``是字符串比较函数,用来比较字符串的大小,从第一个字符开始比较,比较的是字符的ASCII码值。函数有两个参数,一个参数是目标空间的地址,一个参数是源函数的地址,再拷贝过程中,'\0’也将会背拷贝。函数是用来计算字符串的长度的,计算的是’\0’之前的字符个数。
2024-03-19 18:47:43 1019
原创 C语言指针总结
二维数组传参实际上传递的是数组首元素的地址,类似于一维数组一样,传递的是首元素的地址,我们可以把二维数组看成一个一维数组,二维数组里的每个元素都是一维数组,那么首元素的地址就是一维数组整个数组的地址,我们需要使用数组指针来接收。指针数组的每一个元素都是指针。指针变量的大小是由地址的大小来决定的,地址的大小是由机器的地址线数量决定的,32位平台的指针变量的大小是4个字节(32个bit位),64位平台下是8个字节(64个bite位)。(2)&数组名,这里的数组名代表的是整个数组,取出的是整个数组的地址。
2024-03-10 17:46:34 1840 1
原创 数组的基本知识总结
数组下标是从0开始的,也就是说,int arr1[0]代表arr数组下标为0的元素,也是数组arr的第一个元素。二维数组的初始化与一维数组也有相似之处,二维数组的行下标是从0开始的,列下标也是从0开始的。为了更的观察,二维数组的初始化也可以在大括号里使用大括号,代表每一行的元素。是数组类型,4表示元素个数,元素个数需要用[]方括号括起来。中的常量值可以是变量,但是数组大小一旦确定,就无法改变。计算的是arr数组的大小,单位是字节,常量值2代表的是数组每行有多少个元素。计算的是一个数组元素的大小,因此,
2024-02-02 11:01:26 446
原创 C语言扫雷游戏是如何实现的?
但是,这里有一个不方便的地方,那就是在排除雷的时候,要计算坐标附近的八个位置上是否有雷,如果坐标是(9,9),那我们应该如计算呢?之后,我们就可以来布置雷,布置雷可以采用生成随机数的方法来,生成雷的坐标位置,然后雷布置好之后就可以排除雷了,具体细节请向下翻阅。,用于存放数据,一个数组主要用来存放布置雷的信息,另一个数组用来存放排除雷的信息,两个二维数组的联合使用,能够更好的提高代码效率。用户会输入正确的坐标,这时我们就应该打印棋盘,并在打印的棋盘中用户输入的坐标出显示出周围8个坐标雷的个数。
2024-01-31 19:18:12 631
原创 C语言分支和循环语句
1,C语言中的分支语句有三种:(1)if语句(2)switch语句如果表达式为真,则执行语句,表达式为假,则不执行语句。:在C语言中,0表示假,非0表示真。例如:输入一个数,判断是否为奇数2、else如果想要实现两个分支的话,就需要使用到if…else语句了。例如:输入一个数,判断这个数是奇数还是偶数3、嵌套ifif也可以实现多个嵌套的形式。例如:输入一个整数,判断输入的是0,还是整数或负数。:else总是与它最近的if匹配。3、switch语句。
2024-01-24 16:21:40 352 1
原创 printf应该如何使用
这里的%f代表的是浮点数类型,这里的4代表的是字符串最小长度为4,2代表的是小数位为两位,如果字符串的长度超过了字符串最小长度,则原样输出。1、 printf() 的作⽤是将参数⽂本输出到屏幕。在这里%d就是一个占位符,%d代替的是4,%代表的是这是占位符,d表示的是占位符的类型,%d表示的是一个整型。输出的结果为一个空格+12,默认右对齐,如果你想左对齐的话就在3前面加一个符号。是不显示正号,只显示符号,如果你想显示正负号,可以在%后面加一个+号。允许限定占位符的最⼩宽度。定制输出⽂本的格式。
2024-01-23 11:47:05 361
原创 sizeof操作符需要注意的哪些事?
sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在 程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。sizeof是一个关键字,同时也是一个操作符。它是专门用来计算sizeof操作数的类型长度的,单位是字节。sizeof的返回类型是size_t类型的。sizeof的操作数既可以是类型,变量和表达式。3,sizeof的返回类型。sizeof表达式不计算,2,sizeof的操作数。1,sizeof的概念。
2024-01-19 09:42:42 385 1
原创 初始C语言
main函数由三部分组成,首先,int main()为第一个部分,此外,在第一个部分下面需要有一个大括号{};程序是在大括号里面进行,在大括号里的return 0;main函数是C语言的主函数,一个程序是从main函数开始的,在return 0;注意:一个项目有且仅有一个主函数,main函数是程序的入口。C语言出现时间早,在1972年的时候就已经出现,后来被广泛的运用,现在仍然在常用计算机语言中排行前三。由此可见,C语言使用的广泛性,普遍性和持久性。当然,C语言仅仅只是人和计算机对话的语言的一种。
2024-01-17 20:31:05 375
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人