- 博客(38)
- 收藏
- 关注
原创 顺序栈和非循环队列来咯!!!
通过上几篇文章,我们一直在学习我们的线性表,我们学习了我们的顺序表,链表等相关线性表,那么我们今天来学习一下栈和队列这两种线性表叭!当然我们今天只介绍我们的顺序栈和非循环的队列。可能有小伙伴想问了:为什么不介绍链栈,共享栈,循环队列呢?原因很简单啊~我不会!当然,过几天应该会学会,过几天的事过几天再说。马上就进入我们的顺序栈和非循环队列当中吧。
2023-03-23 08:53:52
30
1
原创 带头循环双向链表来咯!!!
继上文,我们了解了结构最简单的一种链表---单链表那么我们今天就来讲解一下结构最复杂的链表---带头循环双向链表。当然今天的链表也许看起来结构十分复杂,对比单链表看上去难上很多,但实际上,越是结构复杂,越是操作起来简单。那么话不多说,马上就开始我们的带头循环双向链表的讲解吧那么还是先来了解一下各种特点的区别吧~
2023-03-14 16:42:03
501
4
原创 单链表来咯!!!
接上文,我们介绍了线性表以及常见的线性表“顺序表”,但是顺序表也有美中不足的地方,并不是任何时候都适合使用顺序表的,以下为顺序表的缺点:1.插入删除操作需要移动大量元素2.当线性表长度变化较大时,难以确定存储空间的容量,造成存储空间的碎片所以我们今天就来了解一下另一种线性表---链表!!!那么什么是链表呢?1、链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列结点(地址)组成,结点可动态的生成。
2023-03-13 21:05:44
462
1
原创 顺序表来喏!!!
还记得前面的文章:《通讯录的实现》吗?通讯录的完成就借助了顺序表这种数据结构!!!那么今天我们就来介绍我们的顺序表介绍顺序表前,我们来了解一下线性表的概念顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表:可动态增长的数组,要求数据是连续存储的。
2023-03-11 18:03:22
668
1
原创 C++继承
在之前的文章中,我们已经介绍了C++面向对象中的三大特性之一:封装。那么这一篇文章,我们将介绍同为C++面向对象中的三大特性之一:继承。那么什么是继承呢?
2023-03-11 17:19:47
602
1
原创 让你我有缘的“友元”
友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是它可以访问类中的私有成员。友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将。都定义为公有的,这又破坏了隐藏的特性。另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于。
2023-03-02 11:10:28
678
原创 类和对象-静态成员
在 C 语言中,static 关键字不仅可以用来修饰变量,还可以用来修饰函数。在使用 static 关键字修饰变量时,我们称此变量为静态变量。静态变量的存储方式与全局变量一样,都是静态存储方式。但这里需要特别说明的是,静态变量属于静态存储方式,属于静态存储方式的变量却不一定就是静态变量。例如,全局变量虽然属于静态存储方式,但并不是静态变量,它必须由 static 加以定义后才能成为静态全局变量。静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。
2023-02-03 14:42:36
1160
8
原创 类和对象-对象特性
主要讲述对象的初始化与清理,构造函数与析构函数,其分类和调用,以及调用时机等相关内容对象的初始化与清理:1.生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用的时候也会删除一些自己的信息数据保证安全2.C++中的面向对象来源于生活,每个对象也都会有初始设置以及对象销毁前的清理数据的设置。
2023-02-02 21:36:32
861
3
原创 类和对象-封装
C++面向对象的三大特性:封装、继承、多态封装性:数据和代码捆绑在一起,避免外界干扰和不确定性访问。封装可以使得代码模块化。继承性:让某种类型对象获得另一个类型对象的属性和方法。继承可以扩展已存在的代码多态性:同一事物表现出不同事物的能力,即向不同对象发送同一消息,不同的对象在接收时会产生不同的行为(重载实现编译时多态,虚函数实现运行时多态)。多态的目的则是为了接口重用那么我们今天着重讲述三大特性之一:封装!!!
2023-02-01 14:30:52
969
3
原创 C++函数提升
主要介绍函数的默认参数用法,占位参数的用法,函数重载的相关语法和相关注意事项。函数的默认参数:在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。也就是说,调用函数时可以省略有默认值的参数。如果用户指定了参数的值,那么就使用用户指定的值,否则使用参数的默认值。所谓默认参数,指的是当函数调用中省略了实参时自动使用的一个值,这个值就是给形参指定的默认值。c++在声明函数时,可以设置占位参数。
2023-01-31 16:41:36
940
3
原创 C++引用
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
2023-01-29 20:55:21
965
3
原创 程序的内存模型
C++在程序运行前分为全局区和代码区代码区特点是共享和只读全局区中存放全局变量、静态变量、常量常量区中存放const修饰的全局常量和字符串常量。
2023-01-28 16:32:06
976
5
原创 大端/小端
大小端模式,是电脑的一种存储模式。大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,数据从高位往低位放;这和我们的阅读习惯一致。小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。在乔纳森·斯威夫特。
2023-01-22 12:06:24
983
2
原创 二分查找与线性查找
二分查找的基本思想是将n个元素分成大致相等的两部分,取a [n/2]与x做比较,如果x=a [n/2],则找到x,算法中止;线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功;二分查找:时间复杂度为O(logn),一般所用时间比线性查找短,速度快,但是最大的问题就是只能对有序的数组进行查找,只要是无序的数组都无法进行二分查找。假使总共有n个元素,那么二分后每次查找的区间大小就是n,n/2,n/4,…
2023-01-20 21:09:33
997
原创 汉诺塔(hanio)
在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而。设a, b, c是3个塔座:开始时,塔座a上有n个自上而下、由小到大地叠在一起圆盘,各圆盘从小到大编号为1, 2, …规则3:在满足移动规则1和2的前提下,可将圆盘移至a, b, c中任一塔座上。
2023-01-19 17:25:57
1251
2
原创 通讯录的实现
由于该系统围绕着人的基本信息,所以定义一个结构体用于存放联系人的基本信息,宏定义相关信息的最大值,由于想要通讯录为动态的,可随时增添或删减联系人,那么定义一个结构体用于对该系统进行扩容操作。
2023-01-18 20:48:05
1031
5
原创 KMP算法
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。它的时间复杂度为O(m+n)。
2023-01-18 19:28:41
1009
原创 BF暴力算法
假设模式串的长度为N,主串为M。那么该算法最高效的情况就是第一次就匹配成功,那么while循环只需要执行N次即可完成匹配,则时间复杂度为O(N);最坏的一种情况主串的末尾处的倒数N长度的串与模式串匹配成功,则while循环需要执行M*N次,那么时间复杂度为O(N*M)。BF算法简单粗暴,但是还可以对它进行修改,那么下一篇会讲我们的KMP算法的实现。查找主串中字串出现第一次的位置。
2023-01-18 11:15:50
1011
原创 内存函数来喏~
isxdigit 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F。memcmp ()首先将s1 第一个字符值减去s2 第一个字符的值,若差为0 则再继续比较下个字符,若差值不为0 则将差值返回。isalnum 字母或者数字,a~z,A~Z,0~9。如果source和destination有任何的重叠,复制的结果都是未定义的。如果源空间和目标空间重叠,就得使用memmove函数处理。
2023-01-12 16:19:29
1075
原创 指针进阶!!!
而str3和str4是两个指针,编译器在处理的时候,会将相同的常量字符串做成同一个地址,所以,str3和str4指向的是同一个常量字符串,所以str3 == str4。后面的常量字符串赋值给这个字符整型的指针,但是常量字符串出现时,这个常量字符串的值是常量字符串的首字符的地址,也就是说以上这条代码,是将a的地址传给p这个指针变量。指针是由类型的,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限。因为常量字符串是不能被修改的,所以在这个指针变量前要加一个const。
2023-01-11 13:33:13
1069
原创 数据的存储
2. 在计算机内部保存M的时候,默认的这个数的第一位总是1,因此可以舍去,只保存后面的小数部分,等到读取的时候,再把第一位的1加上去,这样可以节省1位有效数字。这时,浮点数就采用下面的规则表示,指数E的计算值减去127或1023,得到真实值,再将有效数字M前加上第一位的1.大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,宝尊在内存的高地址中。
2023-01-05 12:56:09
1067
原创 Java的第一课
Java的虚拟机本身不具有跨平台功能的,每个操作系统下都有一个不同版本的虚拟机。启动 Win + R。如果想要在cmd窗口上看到进入路径中的文件,只需要输入 dir。进入多级文件夹 cd 文件夹1\文件夹2\文件夹3。我们想要运行一个已有的Java程序,那么只需要安装JRE即可。进入文件夹 cd 文件夹名称。我们想要开发一个全新的Java程序,那么必须安装JDK。Java虚拟机-------JVM。
2023-01-02 16:26:48
1077
原创 鸡与兔同笼问题
鸡兔同笼”问题是中国古代的数学名题之一。大约在1500年前,《孙子算经》中就记载了这个有趣的问题。这4句话的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94条腿。问笼中各有多少只鸡和兔?我们从键盘上输入鸡和兔子的个数和腿的个数,之后输出鸡和兔子的个数。今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?从头的数量出发,推出我们鸡和兔子的个数。那么第一步还是定义并初始化我们的变量。
2022-12-01 19:40:59
1510
原创 扫雷,扫雷
看完我们简易的菜单之后,需要我们输入相对应的值,输入1则进入我们的扫雷游戏,输入0就退出我们的循环,输入其他的就要让玩家重新输入。1.我们排查的位置就是雷,那么我们就会被炸死,然后游戏结束,并且应该告诉我们整个棋盘的数据,所有雷的位置。2.我们排查的位置不是雷,那么我们的游戏会继续,并再次打印我们的棋盘,并且打印了上一个步骤的结果。初始化了我们的棋盘之后,我们就要去打印我们的棋盘,但是我们不会去打印放置雷的棋盘。4.我们排查的位置是非法的,不在我们整个棋盘规定的范围内。我们的set就是我们放置的符号。
2022-11-11 16:30:19
1646
原创 学习C语言的第九天
比如:char往后跳1个字节,int往后跳4个字节。若arr是个int类型的数组并且有10个数字放在其中,即int arr[10],那么这个数组的大小为40字节。sizeof(arr)------计算的是整个数组的大小。函数的声明一般放在头文件当中,函数的定义一般放在源文件当中。所以可以通过sizeof计算出数组内,数字的个数。printf---返回值是打印在屏幕上的字符的个数。存在限制条件,当满足某个限制条件时,递归便不再继续。函数的返回类型不写的时候,默认返回的是int类型。
2022-11-01 11:24:44
1040
原创 学习C语言的第八天
ex: strcpy(arr1,arr2)---把arr2字符串拷贝到arr1数组当中。当函数调用的时候,实参传给形参,这时形参是实参的一份临时拷贝,对形参的修改不影响实参。所以格式: char* ch = strcpy(arr1,arr2)strcpy---用于字符串拷贝。memset------内存设置。
2022-10-31 16:18:28
1022
原创 学习C语言的第七天
system是一个库函数,可以执行系统命令,cls是清空屏幕的一个指令,它的头文件是但建议这个无符号数,传入时间戳,即time(time*),要引头文件Sleep函数是实现休眠,单位是ms,头文件是rand函数是专门用来生成随机数的,需要引头文件strlen---用于计算字符串的长度,遇到‘\0’就会停止。如果第一个字符串小于第二个字符串,返回小于0的数字。如果第一个字符串大于第二个字符串,返回大于0的数字。
2022-10-27 19:43:37
1220
原创 学习C语言的第六天
continue在循环体中:不会跳出循环体,但不再执行continue以下的语句,会跳回循环体一开始的判断部分。break在循环体中:会直接跳出循环,不再执行break以下的语句,并且不再执行循环体。while(表达式) ps:至少循环一次!2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法。1.不要在for循环体内修改循环变量,防止for循环失去控制。for循环的初始化,判断和调整三个部分都可以省略。但是省略调判断部分,判断就恒为真,循环就死循环。键盘输入回车------\n。
2022-10-25 20:53:16
1534
原创 深度C语言的第二天
单纯的使用源文件,组织项目结构的时候,项目越打越复杂的时候,维护成本会变得越来越高!static修饰的全局变量,该变量只能在本文件内部访问,不能被外部其他文件直接访问。static修饰函数,该函数只能在本文件内被访问,不能在外部其他文件直接访问。.h:头文件,组织项目结构的时候,减少大型项目的维护成本。static修饰局部变量,更改了局部变量的生命周期。可能有一个问题,头文件被重复包含的问题。最名不符实的关键字---static。extern---变量的声明。2.所有的变量的声明。
2022-10-23 17:16:46
1246
原创 学习C语言的第五天
C99中引入了变长数组的概念,这个时候数组的大小是可以使用变量的,但是数组不能初始化。3.转向语句:break语句,goto语句,continue语句,return语句。2.循环执行语句:do while 语句,while语句,for语句。1.条件判断语句,也叫分支语句:if语句,switch语句。if语句中的只有相距最近的if和else才会匹配。if语句在条件成立时,执行多条语句要加上{}C99之前,数组的大小不能使用变量。struct---结构体关键字。结构体的{}后一定要有;结构体的指针->成员名。
2022-10-22 14:53:07
1045
原创 学习C语言的第四天
全局变量本身是具有外部链接属性的,但是如果全局变量被static修饰,这个外部属性就变成了内部链接属性,这个全局变量只能在自己的源文件内部使用。其中pa是一个变量,这个变量是用来存放地址的,而地址又叫做指针,所以在C语言中把pa叫做指针变量(指针变量是存放指针的变量)static的修饰,会把外部链接属性会变成内部链接属性,最终使得全局变量的作用域变小。指针变量存放的是32bit的地址,所以32位机器上,指针变量的大小是4个字节。指针变量存放的是64bit的地址,所以64位机器上,指针变量的大小是8个字节。
2022-10-20 20:56:42
1020
原创 学习C语言的第三天
4.赋值操作符:= += -= *= /= %= &= |= ^= =当表达式1||表达式2||表达式3,只要出现一个表达式值为 1,则所有的表达式都会执行。9.逗号表达式:exp1,exp2...expn------最后输出最后的表达式。------数组的创建和初始化。EOF---end of file---文件结束标志。/:---除号的两端如果都是整数,执行的是整数除法。%---(取模)(取余)---%两边必须都是整数。
2022-10-17 21:57:55
1264
原创 学习C语言的第二天
C语言提供了一个库函数,可以计算字符串长度---strlen。\t---水平制表(HT)(跳到下一个TAB位置)\n---换行(LF),将当前位置移到下一行开头。\f---换页(FF),将当前位置移到下页开头。\r---回车(CR),将当前位置移到本行开头。\ddd---1到3位八进制数所代表的任意字符。\b---退格(BS),将当前位置移到前一列。%s---打印字符,打印到‘\0’才会停止。\xhh---十六进制所代表的任意字符。\\---代表一个反斜线字符‘\’)---三字母词---]
2022-10-16 12:08:01
1045
1
原创 深度C语言的第一天
一般在代码块中定义的变量,及局部变量,默认都是auto修饰的,不过一般省略(所以你可以当他不存在)指的是该变量从定义到被释放的时间范围内,所谓的释放,指的是曾经开辟的空间“被释放”return---子程序返回语句(可以带参数,也可以不带参数)循环条件。void---声明函数无返回值或无参数,声明无类型指针。continue---结束当前循环,开始下一轮的循环。extern---声明变量是在其他文件正声明。default---开关语句中的“其他”分支。b.为什么要记载在内存----因为‘快’!
2022-10-15 19:58:27
1035
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人