- 博客(19)
- 收藏
- 关注
原创 迷宫问题(一)(C++版本)
我们通常用‘0’表示节点可以通行而‘1’表示节点不可通行。通过上面的简述我们可以得知用栈的数据结构来实现迷宫通路的记录,我们可以将迷宫整个实现通过一个类来实现类中包含了公共的函数来实现迷宫各个部分和私有成员变量。我们可以分析得到类中。
2025-06-07 23:25:08
507
原创 强大的智能指针
这个时候我们就可以用weak_ptr指针来作为一个观测者来观察shared_ptr的生命周期,他无法去改变引用计数也无法访问指针指向的对象,因为weak_ptr没有*与->符号的重载,所以说它只能充当一个观测者的角色。weak_ptr指针通常与shared_ptr指针一起使用来解决循环引用的问题,循环引用问题的起因简单来说就是一个类里面用shared_ptr指针定义了一个别的类型指针,然后用shared_ptr指针来定义该类的指针,这种情况下释放了该类的内存但该类里面定义的类的指针无法释放。
2025-04-23 22:34:52
958
原创 十大排序算法(c语言版本)上
冒泡排序(BubbleSort)是最基本最好理解的排序算法,基本上每次学习一门新的语言我们都会用冒泡排序算法作为例子进行讲解,顾名思义他就和泡泡一样每次都会将大的数或则小的数排到最后,如此往复每次最后一个数都是最大的数到第一个数时就排好了。我们先创建一个arr数组来储存一些乱序的整型以便来对其进行排序,a[8]={49,38,65,97,76,13,27,49};,需要进行n-1趟排序,这里有7个数所以n为8需要进行7趟排序。
2025-01-17 16:52:17
635
原创 数和二叉树
树由节点(Node)组成,每个节点包含一条数据和多个指向其子节点的引用。树的一个关键特性是每个节点最多只有一个父节点,但可以有多个子节点。双亲表示法用动态数组来实现,孩子节点保存父亲节点的下标。:根节点定义为第1层,其子节点为第2层,以此类推。根节点左指针指向左孩子,右指针指向兄弟,如下图。:从根节点到指定节点的唯一路径的长度。:从指定节点到叶节点的最长路径的长度。二叉树是每个节点度不超过二的特殊的树。:度为0的节点,即没有子节点的节点。:从一个节点到另一个节点的节点序列。:没有父节点的节点。
2024-11-20 23:02:05
269
原创 栈和队列(c语言版)
它只允许在表的一端进行插入,而在另一端删除元素。栈的实现就是创建栈与销毁栈的过程,栈的操作不与线性链表一样,它的操作相对较少包含头插与头删,还有返回栈顶元素与栈底元素,判断栈的大小,判断栈是否为空等操作。队列的实现与操作与栈的一样包括了队列的创建与销毁,操作则是入队,出队,返回队头元素,队尾元素,和返回队列的大小与判断队列是否为空。栈是一种特殊的线性表,其只允许在链表的一端进行插入与删除操作,这里我们用链表进行操作。栈和队列的操作的实现并不是只能用链表与数组实现的,只是这两种方法方便栈和队列的实现。
2024-11-19 21:49:34
243
原创 线性表的链式表示和实现
在链表中添加或删除节点时,只需要修改相关节点的指针,不必像数组那样移动大量元素,这样操作起来更快。:链表可以轻松地实现各种复杂的数据结构,如双向链表、循环链表等,为不同的算法实现提供了便利。:链表不支持随机访问,访问特定位置的节点需要从头开始遍历,这在数据量大时会影响效率。:每个链表节点都需要额外的存储空间来存储指针,这与数组相比是一种空间上的浪费。概念:链表是一种物理储存结构上非连续,非顺序的存储结构,数据元素的。(6)在pos位置前插入元素和删除pos位置元素。
2024-11-03 20:03:08
390
原创 线性表的定义与使用
至于每个数据元素的具体含义,在不同情况下各不相同,它可以是一个数或一个符号,也可以是一页书,甚至可以是其它复杂的信,常见的线性表:顺序表,链表,栈,队列,字符串。3. 一般情况下我们使用动态顺序表对数据进行储存,因为动态可以改变表的空间大小,而静态表无法改变空间的大小所以对数据的储存比较麻烦。但是在物理结构上并不一定是连续的,线性表在物理上储存时,通常以数组和链式结构的形式储存。4.完成表的创建以后我们就要对顺序表进行一系列的操作,即对顺序表的增,删,查,改,等基本操作。在数组上完成数据的增删查改。
2024-11-01 22:53:01
388
原创 时间复杂度与空间复杂度
时间复杂度的定义:在计算机科学中,算法的复杂度是一个函数,它定量描述了该运算的运行时间。一个算法所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在计算机上跑起来才能知道。一个算法所花费的时间与其中语句的执行次数成正比,因为这样计算没有太大的意义,所以空间复杂度算的是变量的个数。时间效率被称为时间复杂度,而空间效率称为空间复杂度。时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需的额外空间。使用大O的渐近表示法以后,Func1的时间复杂度为:O(N^2)。
2024-11-01 21:40:19
234
原创 整数与浮点数在计算机中的储存方式
比如保存1.01的时候,只保存01,等到读取的时候,再把第⼀位的1加上去。以32位浮点数为例,留给M只有23位,将第⼀位的1舍去以后,等于可以保存24位有效数字。对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。有符号的整数,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,最高位的⼀位是被当做符号位,剩余的都是数值位。
2024-09-21 22:37:49
569
原创 写一个函数判断整数在系统的储存方式为大端还是小端
所谓大小端就是一个整形在电脑系统中以十六进制的储存方式,当一个数据超过一个字节时在内存中储存顺序会有所不同,按照不同的顺序我们分为大小端两种,大端的低字节保存在高位,小端的低字节保存在低端。我们可以用所学的知识来解答让1强制转换为char类型,这样就保存了 01(小端)或者 00(大端),然后再按位与上1如果是小端就return1,如果是大端就返回0。大端储存(0x 01 00 00 00)在系统中的储存方式有小端储存(0x 00 00 00 01)2.如何判断大小端。
2024-09-06 22:52:23
333
1
原创 扫雷游戏的进阶实现
如果我们输入的坐标周围一圈八个坐标没有雷,那么程序将向周围展开找雷重复往返的执行,直到其中的坐标周围八个坐标有雷就停止进行并且把雷表在该坐标上,这就是展开的逻辑。将输入坐标周围八个坐标都遍历再调用函数查找,这样往复就能实现展开了,所以我们用了一个。标记雷的实现非常简单,只需要在循环里面加上一个if语句就能实现每次是否需要标记雷。扫雷游戏的初级只实现了基本操作,只能一个一个的找雷无法与网页版本一样展开。所以我们现在实现可以展开并且可以标记雷的进阶版扫雷。现在就实现了完整版的扫雷游戏了。
2024-08-29 16:06:07
1087
1
原创 扫雷游戏的初级实现
再继续分析,我们在棋盘上布置了雷,棋盘上雷的信息(1)和非雷的信息(0),假设我们排查了某⼀个位置后,这个坐标处不是雷,这个坐标的周围有1个雷,那我们需要将排查出的雷的数量信息记录存储,并打印出来,作为排雷的重要参考信息的。这里我们肯定有办法解决,比如:雷和非雷的信息不要使用数字,使用某些字符就行,这样就避免冲突了,但是这样做棋盘上有雷和非雷的信息,还有排查出的雷的个数信息,就比较混杂,不够方便。扫雷的过程中,布置的雷和排查出的雷的信息都需要存储,所以我们需要⼀定的数据结构来存储这些信息。
2024-08-28 17:01:28
1121
1
原创 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。
定义了A,B,C,D来表示他们的回答,其中0表示不是凶手,1表示凶手,A说不是我则表示其余三人都可能为凶手所以“A = 0;”诺为凶手则对应的小写字母加一,到最后如果获得三票则为凶手。
2024-08-20 18:44:01
390
原创 冒泡排序。
冒泡排序是将一个数组中的所有数按从小到大的顺序排列的,从第一个数开始与后面每一个数进行比较,诺大于后面的数则交换顺序,如果后面都有序则不再进行遍历break跳出。
2024-08-18 17:37:13
247
原创 库函数的实现(二)
strncpy与strcpy类型差不多,都属于拷贝字符串的,但strncpy可以拷贝任意个数的字符串,所以strncpy有三个参数。memmove函数用来实现两个或者一个整形字符的拷贝与strncpy不同与strncpy只能拷贝字符串。因为memcpy数组是以字节为单位拷贝的所以函数中要将它强制转化为字符类型,字符的单位为字节。下面是实现自己拷贝自己从arr[2]中为起始位置拷贝1,2,3,4,5,其中单位为字节。下面实现将“7,8,9”取代arr1中的“0,1,2”。3.strncpy函数的实现。
2024-08-17 21:28:43
822
原创 模拟库函数的实现
注意:其中strcpy函数与strcat数组函数形式与库函数中的形式是一样的,都为char*类型返回值都为其首元素的地址,这里模拟的strcpy函数形式与库函数strcpy函数的形式一致。创造一个函数用递归来计算字符串长度,使用递归的方法进行计算。strcat函数是一个衔接函数将两个字符串连接起来。1.模拟strlen函数的实现。2.模拟strcpy函数的实现。3.模拟strcat函数的实现。
2024-08-09 22:15:55
433
原创 1.汉诺塔问题
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。所以可以使用函数递归的办法解决此问题,因为函数递归就是为了解决n个东西到n-1个东西再到n-2个东西最后到1这类问题。然后一直重复这两个步骤直到n==1时,将最后一个盘子移到目标杆上。1.将n-1个盘子移到中转杆将最底下的盘子移到目标杆。2.将n-2个盘子移到起始杆将最底下的盘子移到目标杆。图片展示:假设解决三层塔即n=3,
2024-07-31 18:22:08
323
原创 循环结构程序设计
这里我将直接介绍循环语句,就不过多介绍前面的基础了我们学习循环程序是为了解决生活中遇到需要重复处理的问题,一般这种问题人们计算需要花费很大的精力,而使用计算机仅仅只需要一会儿。
2024-07-17 21:42:51
382
原创 我们的第一门计算机语言(c语言)
初识c语言:这次迎来了我第一次正式写关于计算机语言学习的文章,标题我命名为“我们的第一门计算机语言”,为什么会这样命名呢?因为我们大部分人都是在大学期间才开始学习计算机语言的而第一门学的编程语言是c语言所以对于我们大部分人来说第一次接触的编程语言就是c语言。也是大部分人是在学习c语言中打牢了基础并开辟了学习其他语言的基础与能力,所以可以说c语言是我们在计算机语言里的母语了。在此我就不过多的介绍c语言的概念,相信能在csdn上学习的人都对c语言有基本的了解,所以我直接介绍我所学习到的c语言基础知识。
2024-07-17 20:47:08
139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅