- 博客(39)
- 收藏
- 关注
原创 【数据结构】排序
排序:指的是将一组数据(通常是一个列表、数组或任何有限集合)按照某种特定的顺序重新排列的过程。这个特定的顺序可以是升序(从小到大)、降序(从大到小)或者根据自定义的规则进行排序。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次 序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
2024-07-29 13:20:51
1086
11
原创 二叉树 —— OJ题目详解
观察示例一:一颗对称的二叉树,我的左子树根节点 == 你的右子树根节点、我的右子树根节点 == 你的左子树根节点。其实这个很简单,我们只需要遍历到root树的每一个节点就相当于找到了root树的所有子树,因为每一个节点都是某棵树的根节点,通过根节点自然得到了一节树。所以示例一是一颗对称二叉树,我们代码则使用递归的方法,先比较当前两棵树的根节点是否相同,在比较这两颗树的左右子树是否对称。依旧是使用递归,先翻转左子树,在翻转右子树。由于翻转后,左右子树的根节点没有动,最后在将根节点翻转即可完成当前树的翻转。
2024-07-15 22:48:53
529
15
原创 数据结构 —— 二叉树
树是一种非线性的数据结构,它有着多分支,层次性的特点。由于其形态类似于自然界中倒过来的数,所以我们将这种数据结构称为“树形结构”注意: 树形结构中,子树之间不能有交集,否它就不是树形结构。
2024-06-26 20:53:01
1633
22
原创 数据结构 —— 堆
堆是一种特殊的树形数据结构,称为“二叉堆”(binary heap)看它的名字也可以看出堆与二叉树有关系:其实堆就是一种特殊的二叉树堆的性质:堆中某个结点的值总是不大于或不小于其父结点的值;堆总是一棵完全二叉树。
2024-06-12 22:44:12
1513
12
原创 用队列实现栈 用栈实现队列 设计循环队列
当我们要出数据时,把存数据栈(pushst)导入到 出数据栈(popst)中,在对栈顶取数据,如此往复就可以实现。将 size - 1个数据移动到空队列中,再将最后一个数据出队列,如此往复就可以完成。固定两个栈,1. 存数据栈(pushst) 2. 出数据栈(popst)我们可以使用两个队列,一个队列为:空队列,一个队列为:非空队列。利用数组来创建循环队列。队列的特点:先进先出。
2024-05-27 22:35:50
680
14
原创 数据结构 —— 栈 与 队列
栈(Stack)是一种特殊的线性数据结构,它遵循后进先出(LIFO,Last In First Out)的原则。栈只允许在一端插入和删除数据,这一端被称为栈顶(top),另一端被称为栈底(bottom)。就像弹匣一样,先压进去的子弹会最后被发射,最后压进去的子弹反而最先被发射。
2024-05-22 21:29:01
503
7
原创 轮转数组 与 消失的数字
0 ^ 0 ^1 ^ 1 ^ 2 ^ 2 ^ 3 ^ 3 ^ 5 ^ 5 ^ 4 它们打乱顺序对最终结果也不影响。使用位的运算,将 0 ~ n 的数,全部与数组内的数进行 (按位异或) ^ 运算 留下来的数就是缺失的。将 0 - n 的数全部加起来,再把数数组中的元素全部减去,剩下的那个数字就是消失的数字。任何数 ^ 任何数 = 0 例如 :001010 ^ 001010 = 000000。我们发现两两成对的都被消除了,剩下的那个就是缺少的数字了。第二段 再把不需要旋转的元素逆置。
2024-05-12 22:28:40
290
9
原创 c语言实现贪吃蛇小游戏————附全代码!!!
在此项目中我们需要用到 Win32 API 中的一些完成对的操作,接下来我们将挨个介绍Win32 API(Windows 32-bit Application Programming Interface)是微软为Windows操作系统提供的一套应用程序编程接口(API)。它允许开发者使用C或C++等编程语言来编写Windows桌面应用程序。Win32 API涵盖了从基本的窗口管理、图形绘制到更高级的网络编程、文件I/O和线程同步等各种功能。
2024-05-08 22:22:09
2020
14
原创 双链向表专题
链表的种类非常多组合起来就有 2 × 2 = 8种链表说明:虽然有这么多的链表的结构,但是我们实际中最常⽤还是两种结构:单链表和,⼀般不会单独⽤来存数据。实际中更多是作,如哈希桶、图的邻接表等等。另外这种结构在笔试⾯试中出现很多。,⼀般⽤在单独存储数据。实际中使⽤的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使⽤代码实现以后会发现结构会带来很多优势,实现反⽽简单了,后⾯我们代码实现了就知道了。
2024-04-23 10:20:56
598
16
原创 链表经典算法OJ题目
prev是在pcur前面的一个节点,我们会发现,当第一次遍历时,pcur前面并没有节点,那么我们就创造一个节点:哨兵卫(Sentinel),于链表连接,再让prev指向它。顾名思义,就是创造两个指针,一个指针走的慢一点,一个指针走的快一点,对应到我们这一题上就是,同一时间内,一个指针走一步,一个指针走两步:2 × slow = fast。创建 一大 一小 两个链表 ,把大于等于点放到大链表中,小于x的节点放到小链表中,当原链表的节点被全部放置完毕,把大链表链接到小链表后面。
2024-04-20 20:33:01
1196
7
原创 c语言,单链表的实现----------有全代码!!!!
单链表是一种链式的数据结构,它用一组不连续的储存单元存反线性表中的数据元素。链表中的数据是以节点的形式来表示的,节点和节点之间相互连接一般来说节点有两部分组成数据域用来存储各种类型的数据(浮点数,字符串,自定义类型的数据),指针域用来存储的是指针,它用来指向下一个节点。
2024-04-17 20:46:58
375
11
原创 移除元素,合并两个有序数组
就是用来比较nums1 与nums2哪个元素大哪个元素大就把哪个元素放进新的数组。而 数组nums1 的大小干好是nums1中有效元素 + nums2中有效元素,所以我们拿它来当成是新的数组,当然你再新创建一个数组也可以。再次过程中越过num数组val的元素,找num数组中不是val的原素,并把它们从头依次放入num数组,num数组中非val元素的个数要记录起来并返回。蓝色箭头为:数组中的有效元素,并且将red遍历过不是val的元素存起来。原地删除数组num的val元素,那么我们需要做的是遍历num数组。
2024-04-16 21:21:44
424
4
原创 c语言 通讯录项目的实现——有全代码!!!
我们希望联系人的数据可以长久的保留那么我们可以通过文件操作去保存我们联系人的数据到文件中,创建一个储存联系人数据的文件:contacts.txt , 通过这个文件我们将保存联系人数据我们将contacts.txt里的联系人数据导出到程序中,以便后续的操作。
2024-04-14 23:04:41
224
4
原创 预处理详解
基本语法:define常量名 常量值printf("圆的圆周率为:%lf",PI)return 0;当我们在进过预处理之后PI就会被直接替换成3.1415926使用define定义标识符的建议当我们用#define定义标识符的时候,最好不要在后面加上分号(;//例子a//预处理后的代码:printf("%d ",a;这显然是错误的//例子bint m = 0;//预处理后的代码: m = 1;;我们都知道ife lse语句如果不带大括号。
2024-04-11 18:37:42
1227
4
原创 顺序表详解
要知道之前我们要知道是什么线性表(Linear List)是一种常见的数据结构,它用来储存具有线性关系的数据元素的集合这意味着数据元素之间都存在着一对一的关系,即除了第一个元素外,每个元素都有且仅有一个前驱元素,除了最后一个元素都有后继元素。这种关系在逻辑上可以抽象为一条直线结构。就好比排队结账:顾客的结账都是有顺序的,顾客一到顾客二....你通过顾客一可以找到顾客二,通过顾客二可以找到顾客三与顾客一,这种行为在逻辑上是连续的这指的是线性表在内存中的存储方式可以是不连续的。
2024-04-11 17:20:32
386
2
原创 写一个宏,可以将一个整数二进制奇数位和偶数位交换详解
我们要把一个整数二进制奇数位和偶数位交换,首先想到的就是找掩码来进行操作何为掩码?掩码通常是一个二进制数,用于选择和屏蔽特定的位在交换一个整数二进制奇数位和偶数位问题中,掩码用来选则出整数中的奇数位和偶数位。
2024-04-08 13:26:58
482
1
原创 offsetof宏的模拟实现,炒鸡详细!!!
offsetof是定义在c语言标准库中的宏,作用是获取结构体中某个成员相对于结构体起始地址的偏移量。宏原型 : size_t offsetof(structName,memberName);参数:structName:结构体的类型memberName:结构体的成员名返回值:size_t:结构体中某个成员相对于结构体起始地址的偏移量。
2024-04-08 11:02:48
239
1
原创 访问二维数组理解
就是先对arr数组进行 arr [ i ] == * (arr + i) 操作,拿到数组arr的第一个元素(行),然后在对第一个元素进行 arr [ j ] == * (arr + j) 操作,拿到元素中的元素(列)。周所周知二维数组的访问方法为:arr [ i ] [ j ] ----- i 表示行,j 表示列。其实 arr [ i ] == * (arr + i) 这两个是完全相等的,在。所以对(arr+i)进行解引用后就可以访问到这个数组的每一个元素。8.数组名与 &数组名。
2024-03-26 22:38:01
291
3
原创 动态内存分配
realloc也会存在开辟空间失败的情况,所以直接不要拿原先的地址去接收开辟的地址,不然新的空间没有开辟成功,还会把原先的空间搞丢,最好判断地址一下是否为空(NULL)如果你传了个空指针(NULL)让realloc帮你改变空间大小,那么它的作用等同于malloc,会直接帮你开辟一块新的空间,并返回地址。realloc的出现可以让动态内存的管理更加灵活如果你发现你所开辟的动态内促大了或者小了,就可以用realloc函数来进行调整。当原先空间后面的空间 不可以满足你所需要的空间,那么它就会。
2024-03-26 12:21:11
1323
10
原创 自定义类型:结构体
结构体的定义通常使用,struct关键字,并指定结构体的名称(标签),和成员列表//学生名字int age;//学生年龄//学生性别char id[20] //学生学号//分号不能丢这时我们就创建了一个学生类型位段的声明与结构体类似,但有两个不同1.位段的成员名后面都有一个冒号和一个数字2.位段的成员必须是 int或signed int,char,在C99中位段成员的类型也可以选择其他类型。例如:struct A {//申请3个比特位//申请4个比特位//申请5个比特位。
2024-03-24 22:08:07
754
3
原创 atoi函数使用和模拟
如果字符串表示的值超出了 int 类型所能表示的整数范围,函数返回的数值是无意义(垃圾值)。atoi是c语言标准库中的一个函数,它定义在中。功能: 用于将字符串,转化为(signed int)有符号整形。atoi在转化之前,会尽可能的丢弃空白字符,遇到。不在0~9字符后面的(正负号),与其他字符。,或者是不能转化为1~9的字符则返回0。如果丢弃完成后遇到的第一个字符是。它就开始转化,并返回相应整数。(正负号)+ 0~9字符。如果丢弃完成后单独遇到。
2024-03-23 00:36:27
241
6
原创 数据在内存中的存储(2)
所以IEEE 754规定,存⼊内存时E的真实值必须再加上 ⼀个中间数,对于8位的E,这个中间数是127;当E为全0时,取出来的就是1-中间值(127,或者1023)这是人家规定好的。最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。按照上面的公式来看 S = 1 , M =-1.001 , E = 2。按照上面的公式来看 S = 0 , M =1.001 , E = 2。表⽰符号位,当S=0,V为正数;
2024-03-22 19:26:38
766
5
原创 数据在内存中的存储(1)
在了解大端小段之前我们要知道!数据的低位数据高位是什么,拿1(百位)2(十位)3(个位)十进制123举例个位就是低位,百位就是高位要记住!读取数据永远是从低地址开始的!!!当我们存储的内存超过一个字节的时候,数据的存储就会存在顺序问题,而市面上主流的排序方式分为,大端存储,小端存储。数据的低位字节内容保存在高地址处,数据高位字节内容保存在低地址处数据的低位字节内容保存在低地址处,数据高位字节内容保存在高地址处。
2024-03-20 22:25:26
873
5
原创 c语言内存函数
原型:void * memmove ( void * destination, const void * source, size_t num );例如我们先把 5 ,7 交换 ——> 4 , 6交换——> 3, 5交换...,这样就可以完美的解决因为数据覆盖到要转移的数据上而导致的问题。如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。memset是用来设置内存的, 将内存中的数据以字节为单位设置。这种情况的解决方法就是,将。这种情况我们只需要 ,将。
2024-03-20 20:14:58
363
3
原创 c语言指针(2)
二级指针也是指针,是指针就是用来存放地址的,那么它存放的是谁的地址呢?二级指针存放的就是一级指针的地址,有几个我们就成它为几级指针。
2024-03-16 20:13:57
384
4
原创 c语言操作符讲解
原码、反码、补码原码、反码、补码要进入今天的操作符,首先我们要知道原码、反码、补码是什么以及怎么使用;一个(有符号)signed int类型的整形,它所占的内存是4个字节,32个比特位,所以它可以存放32个二进制数字。有符号整数的二进制表示方法有三种,就是原码,反码,补码。这三种形式均有和这俩个部分组成,在中的作用就是表示符号1代表符号,0代表正号。就是正常的二进制数值了。拿2举例它的原码就是:正整数的原、反、补码都相同。负整数的三种表示方法各不相同。
2024-03-06 19:07:48
336
原创 扫雷小游戏
扫雷是1992年发布的一款小游戏,它的玩法很简单。在基础模式下,它由一个9*9的正方形格子组成,当你对任意格子进行操作时如果是雷的话,就会输掉游戏。如果不是雷,它就会显示它一周一共有几个雷。那么我们如何用c语言将它具体实现呢,接着往下。
2023-12-11 23:28:54
281
1
原创 分支与循环
if语句的语法格式如下:if(若括号里的表达式为真则执行大括号里的语句,若为假则不执行){}多分支:if(){} else if(){} else if(){} else if(){}..........,最后一个分支的if可以不用写,当第一个if分支()中的表达式为假,编译器会接着执行下去,直到某个分支()中的表达式为真,那么在往后的分支就不会在执行了。多层嵌套:if语句是可以嵌套的,如何实现,只要在{}中写就可以了。
2023-12-02 01:14:08
849
2
原创 如何生成随机数
在c语言中它为我们提供了一个函数rand,用它我们可以来生成随机数。而它产生的数的范围在:0~RAND_MAX之间。大部分编译器的RAND_MAX都是32767。当我们要使用它的时候需要申明函数库#includetime是定义在#include中的函数。在外面生活中时间是时刻都在变化的值,所以我们可以用时间来使我们的种子发生变化。time函数返回的值其实就是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,单位是秒,
2023-11-30 13:06:26
730
1
原创 坚持学好编程
3.如何学好编程呢,我的做法很简单,先一步到一步,先把c语言学好,这是最基础的,往后到数据结构算法,c++语言,linux系统编程,linux网络编程,mysql数据库,项目翻转,一口气吃不成一个胖子,只要我们找对方法和道路,在加上你的持之以恒,脚踏实地,可能成功没有你想的那么难。5.说到以后的工作,相信大家都想去大厂,因为工资高待遇好嘛,我也不例外,但是我最想去的it公司是字节,因为它工资高待遇更好。2.我学习编程的,目标是想把它给坚持下去并且学好,做到持之以恒,不要三分钟热度,要有一颗坚持的心。
2023-11-23 12:58:00
128
原创 【c语言】printf函数
printf是函数库#include中定义的函数,只有在开头导入我们才能够使用它。printf简单的用法就是向上面程序中这样写上字符,运行后在会在控制台上输入里面的内容。啊怎么这个打印出来的1.400000带这么多0啊,这是因为我们的软件自动会把小数点后6位打印出来。它的存在可以使你想打印的数据更加准确。这两种限定方式可以灵活的运用,他们可以结合起来用,也可以把他当成变量代替。只要写上占位符引号外面在给上参数我们的数据就可以准确的打印出来了。我们限定的最小宽度为5,所以它会在前面补一格。
2023-11-23 10:03:57
400
1
原创 C语言的第一个程序
signed] int-------整型即1,2,3...这种整数我们称之为整形。("%占位符",占位符所对应的数据类型)占位符它的意思就是帮助你占一个位置好让后面的数据可以进来。float double ------浮点型像1.2 1.5这种带小数点的数字就是。_Bool---------布尔型 即ture(真),flase(假)long-----长整形它和int的区别就是它可以储存更多的数字。的意思就是给main返回一个整形类型的值。long long ------比上面的long可储存更多数字。
2023-11-21 23:14:09
37
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人