自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 常见排序算法

然后让左边找到的值与右边找到的值交换位置,如果不大于key的值或者不小于key的值左边继续往右走右边继续往左走。当begin和end相遇的时候,把相遇位置的值与key位置的值交换位置。然后进入循环,如果tmp的值小于end位置的值就让end位置的值覆盖end+1位置的值,让end的值往后走,end下标位置–。如果tmp位置的值大于end位置的值就把tmp位置的值放入end位置的后面,这里的循环判断条件是end>0。然后把最大值与之前end位置的值交换位置,最小位置的值与之前begin位置的值交换位置。

2024-06-08 18:52:06 1474 48

原创 【数据结构】二叉树

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点,除根节点外其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1

2024-06-01 09:30:17 1481 39

原创 622.设计循环队列

但是这里有一个问题,一开始head=tail为空当随着往下进行的时候,head=tail为满。因为是循环队列要注意tail到最后时要形成循环队列,所以tail指针要返回去。取尾:这里还有另外一种写法,如果tail为0也就是放满了tail又循环回来了,此时取下标为k位置的数。判满:结合上图,当元素放满时,tail的下一个位置就是head,根据取模得到关系(tail+1)%(k+1)==head。判空:当在这种情况下时,head和tail相等时只会是在为空的时候。开k+1个空间,但是只放进k个元素。

2024-05-19 16:13:03 376 4

原创 232.用栈实现队列

返回队列开头元素,把放入数据的pushest栈中的数据从栈顶元素开始放入popest栈中,然后返回popest栈的栈顶元素就是队头元素。创建两个栈,一个栈用来放入元素,把这一个栈的元素从栈顶元素开始放入另一个栈中。从第二个栈中取出的栈顶元素就可以当作要实现的队的队头。从队列的开头移除并返回元素,myQueuePop函数,直接用myQueuePeek这个函数来找到队头元素,pop掉并返回队头元素。模拟实现队列放数据直接放在其中pushest栈中。

2024-05-18 19:02:48 138 1

原创 225.用队列实现栈

队列是先进先出,栈是先进后出。需要创建两个队列q1和q2。入栈先用一个队列q1来进行操作,把元素放入q1队列中。在正常栈中出栈出的都是栈顶元素,所以用队列实现栈的时候可以把已经放入q1的元素入队列到q2中,只剩下一个元素然后取q1的队头元素,这个就是栈的栈顶元素。这就是导的过程,用while循环让这个不为空的队列留一个数据,把其他的数据导到另外一个队列。这个留着的数据就是栈顶数据。保持一个存数据,一个为空。入数据入到不为空的队列然后出数据时再导过去。然后是是释放,先释放两个队,再释放管理两个队的空间。

2024-05-18 18:21:52 295

原创 20.有效括号

我们需要判断一对括号是否匹配,匹配的话就返回turn,失败就返回false。我们用栈来实现这个,栈是先进后出的,如果是左括号就入栈,如果是右括号就让栈里的左括号与右括号进行匹配,如果匹配上就继续匹配下一个。这里有特殊情况,如果刚开始入栈的是右括号肯定不匹配,直接返回false。

2024-05-18 16:15:30 170

原创 【数据结构】栈和队列

这篇文章来讲数据结构中的栈和队列,栈和队列都是用顺序表来实现的是两种特殊的顺序表。

2024-05-13 20:29:51 1364 42

原创 138.随机链表的复制

创建临时变量copy,头节点为cur从头遍历把cur的next当作新复制的节点也就是copy。另一种情况是cur的rondom指向下一个cur,那么copy的random也将指向下一个copy的random。创建拷贝节点,把每个原节点的拷贝节点放到原节点的后面。用malloc函数创建一个新节点,让copy里面的值等于cur里面的值,然后进行单链表的插入就可以了。先将拷贝节点插入原节点的后面然后让random指向该指向的位置,创建新链表把拷贝节点放入新链表中。最后将拷贝节点放入一个新链表中。

2024-05-08 14:23:51 213 2

原创 142.环形链表2(返回链表开始入环的第一个节点)

求两个链表的长度,并求两个链表的长度差。所以让A链表为长链表让B链表为短链标。如果B的长度>A的长度就让B链表为长链表A链表为短链表。然后把这个环形链表给分割开来,创建了一个临时变量存储meet的下一个节点,并把meet的next指针置为空,这样就这个环就断开了。第一种方法是有点巧妙在里面的,当fast指针与slow指针相遇时,这个相遇点meet到环起始位置的距离等于head指针到环起始点的距离,也就是等于L。然后遍历,如果长链表和短链表相同就停,并且返回任意一个这就是相交的节点。两个链表从头遍历到尾。

2024-05-07 20:10:00 384 8

原创 环形链表理解||QJ141.环形链表

慢指针叫slow,快指针叫fast,假设slow进环时,fast与slow的距离为N时,这里fast走两个slow走一个。c-1为偶数时之所以能追上,是因为当fast和slow都走起来时相对位移是2,所以为偶数时下一轮就追上了。所以上面的结论不成立。假设从初始位置到进入环的距离为L,fast与slow的距离为N。当N为奇数时,假设N为5,3 1 -1这时就错过了,进行新一轮的追击。当N为偶数时,假设N为4,4-2为2 4-4为0这时就追上了。这时候fast和slow的距离就变成了c-1,c为环的长度。

2024-05-07 18:42:49 410 36

原创 160.相交链表

求两个链表的长度,并求两个链表的长度差。让lenA-lenB因为不知道a长还是b长所以用abs求绝对值。要是按普通情况就要分情况a长一种情况b长一种情况。这种太麻烦,所以让A链表为长链表让B链表为短链标。如果B的长度>A的长度就让B链表为长链表A链表为短链表。用while循环长度差gap次,让长链表和短链表一样长。然后遍历,如果长链表等于短链表就停,并且返回任意一个。首先要先判断这两个链表是否相交。两个链表从头遍历到尾,如果两个尾指针不相等就是不相交就返回NULL。

2024-05-06 07:15:00 165 3

原创 链表的回文结构

当链表是基数,反转链表之后一个是1->2一个是1->2->3其实这里1->2中2的next指针指向的位置也是3。因为从3后面开始就不在逆置了。所以直接比较就可以。回文结构说白了就是看链表从中间分开是否对称。所以我们要先找中间节点,然后对半劈开,把中间节点后面的逆置与前面的进行比较。偶数个的时候就就好理解了,直接比就可以了。这个就是之前写过的用快慢指针找中间节点。这个也是之前写过的逆置链表。

2024-05-06 07:00:00 313

原创 面试题02.02.链表返回倒数第k个节点

用快慢指针的方法,先用while循环让fast指针走出去k个。然后在让两个指针一起走,判断条件为fast指针不为空。题中给的k为2,当fast指针走到最后一个时,slow指针刚好走到倒数第二个节点。

2024-05-05 14:02:27 175 1

原创 面试题02.04.分割链表

要把两个链表相连,不要连上头节点。让小链表连上大链表的头的下一个节点。注意大链表的最后一个节点还连着之前的节点,所以把最后一个节点的下一个节点置为空。创建两个带头链表,遍历原链表,将原链表的节点分别尾插到新链表中。如果节点的值小于x时插入到小链表中,如果节点的值大于x时插入到大链表中。最后释放掉两个头节点,返回小链表头节点的下一个节点。

2024-05-05 11:01:24 223 1

原创 环形链表的约瑟夫问题

当count等于m时,也就是这时这个节点要销毁。是从pcur这个位置开始的也就是pcur是1,prev是pcur的前一个节点。所以当count=m时要销毁的是pcur这一个节点。让prev连接上pcur的下一个节点,具体实现方式在上面代码中。还有一种情况就是不需要销毁节点,直接让pcur和prev往下走就可以了具体在上面代码。=pcur,因为当这个环形链表随着销毁,最后就剩pcur了。这里是一个环形链表,所以我们要创建环形链表。先创建一个新节点然后让节点首尾相连,让链表成环。

2024-05-05 10:06:16 276

原创 c语言题目

先算i=f(f(2))里的f2,2不大于二返回3。i=f(3)返回xf(x-1),3f(2)也就是3*3=9。注意括号。

2024-05-04 16:29:01 1309 1

原创 876.链表的中间节点

当链表为奇数个时,fast到最后一个节点的时候slow刚好到中间节点。当链表为偶数个时,slow走到两个中间节点第二个节点的时候,fast则应该是到了链表最后一个节点的下一个节点。所以我们while循环的判断条件是fast不为空且fast的next指针指向的位置不为空。当slow走到下一个节点的时候,fast走到了下一个节点的下一个节点。创建临时变量slow和fast都表示头节点。给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。

2024-04-26 18:46:27 205 4

原创 21.合并两个有序链表

在l1的值大于l2的值的情况下,因为是升序链表所以要先把小的放入链表中,如果新链表为空就把l2放入新链表中,如果新链表不为空就尾插。先是判断一下如果链表1是空的话就直接返回链表2。然后创建新链表其实也可以先创建新链表在判断是否有空链表。我们就要判断了,如果l1不为空就把l1尾插,如果l2不为空就把l2尾插。将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。接下来就要比较了,用while循环判断条件是链表1和链表2(l1和l2)都不能为空。

2024-04-26 17:49:34 369

原创 206.反转链表

用while循环判断条件为n2不能为空,让n2的next指针连上新链表的头节点。然后让n1=n2,也就是让新链表的头节点为n2。然后让n2=n3,这个节点传完了要从下一个节点了的位置开始传了。到这里要判断n3是否为空指针,因为n3是n2的下一个节点,while循环的判断条件是n2不为空也就是当n2遍历到最后一个节点的时候n3已经是野指针了。创建三个临时变量,n1为新链表,n2为原来链表的头节点,n3为原来链表的头节点的下一个节点。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

2024-04-26 16:15:45 348

原创 203.移除链表元素

在遍历中节点中的数据不等于要移除的值就把这些值放入链表中。但注意要区分情况,如果新链表为空就直接放入链表中,如果链表不为空就尾插。就拿上面的第一个示例来说当我们把5这一节点放入新链表中时,5这一节点还连接着下一节点也就是6这一节点。所以我们要把新链表的最后一个节点的下一个节点置为空。给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回。我们创建一个新链表,ListNode* newhead,*newtail分别表示这个新链表的头和尾。

2024-04-25 18:24:07 355 3

原创 【数据结构】双向链表

和之前我们实现的单链表一天,创建头文件(.h)和源文件(.c),测试文件创建出来test.c}LTNode;双向链表一个节点由数据和指向下一个节点的指针指向上一个节点的指针组成。

2024-04-25 17:27:17 1259 30

原创 【数据结构】单链表

单链表和顺序表一样都是属于数据结构中的一部分,下面来总结和实现单链表。

2024-04-21 11:57:10 1093 13

原创 基于顺序表实现通讯录

我们之前实现顺序表的时候,顺序表储存的是整型类型的数据。我们要想实现通讯录的话,那么存储的类型应该是储存自定义类型的数据。这个自定义类型的数据应该是结构体。先在通讯录的头文件在定义通讯录的结构201020100int age;}peoInfo;因为通讯录的实现是基于顺序表的,要将顺序表中存放的数组类型改为结构体类型,也就是我们定义的通讯录结构体。int size;}SL;注意不要忘了头文件。下面就要在通讯录头文件中声明函数了,想一下。

2024-04-14 19:33:49 1260 19

原创 数据结构之顺序表

当我们想要使用大量同一类型数据时,通过手动定义大量的独立的变量对于程序员来说可读性非常差。我们可以借用数组这样的数据结构将大量的数据组织在一起,结构也可以理解为组织数据的方式。概念:数据结构是计算机存储、组织数据的⽅式。数据结构是指相互之间存在⼀种或多种特定关系的数据元素的集合。数据结构反映数据的内部构成,即数据由那部分构成,以什么⽅式构成,以及数据元素之间呈现的结构。组织和管理数据提高算法效率节省内存空间简化代码提高代码的可读性和可维护性支持抽象数据类型(ADT)

2024-04-09 20:34:43 1691 18

原创 c语言编译和链接

计算机执行二进制指令,我们写的c语言代码要想让计算机执行,需要进行一段复杂的过程。下面来一起学习计算机编译和链接的过程吧。

2024-03-31 07:30:00 1657 15

原创 c语言中文件操作

磁盘(硬盘)上的⽂件是⽂件。程序⽂件数据⽂件(从⽂件功能的⻆度来分类的)。

2024-03-30 16:08:12 1730 12

原创 c语言中动态内存管理

说到内存,大家一定都知道。但是有一种函数可以实现动态内存管理,下面大家一起学习。

2024-03-27 17:04:33 1124 20

原创 c语言中的联合体和枚举

这篇文章总结一下c语言中的联合体和枚举。看看这两个东西到底是什么。大家一起学习。

2024-03-25 13:04:25 1337 4

原创 自定义类型:结构体

/ 1.变量的定义int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2// 2. 初始化struct stu //类型声明int age;//初始化//指定顺序初始化// 3.int date;//结构体嵌套初始化举例struct stuint age;int main()//按照结构体成员的顺序初始化struct stu s={"张三","20","男","20230021091"};//按照指定的顺序初始化。

2024-03-21 08:58:20 1346 9

原创 指针的理解(四)完结

回调函数就是⼀个通过函数指针调⽤的函数。第13讲中我们写的计算机的实现的代码中,红⾊框中的代码是重复出现的,其中虽然执⾏计算的逻辑 是区别的,但是输⼊输出操作是冗余的,有没有办法,简化⼀些呢?因为红⾊框中的代码,只有调⽤函数的逻辑是有差异的,我们可以把调⽤的函数的地址以参数的形式 传递过去,使⽤函数指针接收,函数指针指向什么函数就调⽤什么函数,这⾥其实使⽤的就是回调函 数的功能。sizeof计算变量所占内存空间的大小,单位是 字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。

2024-03-17 09:33:07 359 1

原创 指针的理解(三)

根据上图第一行数组的类型就是arr[5],那么第一行地址的类型就是数组指针类型int*[5].那就意味着⼆维数组传参本质上也是传递了地址,传递的是第⼀⾏这个⼀维数组的地址。数组是⼀个存放相同类型数据的存储空间,我们已经学习了指针数组,那要把函数的地址存放到一个数组中,那这个数组就叫函数指针数组。(*pa)是函数指针变量名 ,(int x,int y)是pa指向函数的函数类型和个数交代,int是pa指向函数的返回值。在这里,(*p)p是数组指针变量名,【10】是p指向的元素个数,int是指向的元素类型。

2024-03-16 20:02:33 510 1

原创 整数和浮点数在内存中的储存(包含原反补码的讲解)

在c语言中,我们常常使用整数和浮点数,那么你知道整数和浮点数在内存中是如何储存的吗?下面大家一起学习。有符号整数的三种表示方法均有数值位和符号位两部分。在二进制数列中最高位是符号位,其余是数值位。符号位用1表示‘负’,用0表示‘正’。正整数的原码、反码、补码、都相同。负整数的原码、反码、补码、各不相同。原码:将一个数值直接按照数值的正负翻译成二进制数列。反码:将原码的二进制数列除符号位外其余数值位按位取反。补码:反码+1得到补码。

2024-03-16 17:56:17 1314 3

原创 指针的理解(二)

上一篇指针的理解(一),给大家介绍了内存和地址的理解,指针变量的和地址的理解,指针的运算。相信大家从中已经初步理解了指针是什么。接下来我们继续学习。加油!!!指针访问数组我们是用这种方式来实现的。我们在这里用&arr[0]的方式取到了数组的第一个元素,但其实数组名就是一个地址并且是这个元素的首地址。下面我们举例说明。如上图,我们发现数组名和取元素首地址打印出来的结果一样。数组名就是数组的首元素。大家看看下面这个代码怎么处理int main()return 0;

2024-03-14 09:27:56 978

原创 指针的理解(一)

我们可以简单理解,32位机器有32根地址总线, 每根线只有两态,表⽰0,1【电脉冲有⽆】,那么 ⼀根线,就能表⽰2种含义,2根线就能表⽰4种含 义,依次类推。32根地址线,就能表⽰2^32种含 义,每⼀种含义都代表⼀个地址。地址信息被下达给内存,在内存上,就可以找到 该地址对应的数据,将数据在通过数据总线传⼊ CPU内寄存器。在电脑中有8GB\16GB\32GB的内存,把这些内存划分为一个个的单元,每个内存为1个字节。在内存中四个字节是相邻,也就是说当我们找到一个地址的时候我们就可以找到四个相邻的地址。

2024-03-10 10:43:59 1042 1

原创 扫雷C 语言实现

在我们布置雷的时候,是十个雷随机布置在9*9的棋盘当中的。但是当选到最外面一圈的雷的时候如果设置9*9的棋盘就会出现悖论,这时我们就要在mine棋盘中设置11*11的的棋盘,当然给玩家显示的还是9*9的棋盘。在实现布置雷函数的时候时,x与y坐标用rand()余上行和列并加一(产生1到10的随机数,在数组下标1到10的范围内布置雷)。首先要设计棋盘,但是设计棋盘的时候我们给一个棋盘存放布置好雷的信息(数组mine),给另一个棋盘存放排查出雷的信息(数组show)。下面就要在game.c中来实现这个函数了。

2024-03-06 16:26:26 909 1

原创 c语言循环语句

/循环体包含更多语句时,加上大括号。的执行结果如果=0就循环结束,!=0继续执行直到=0为止。while语句的语法结构与if语句非常相似。表达式2 ⽤于循环结束条件的判断。的结果是否为0,决定循环是否继续。表达式1 ⽤于循环变量的初始化。表达式3 ⽤于循环变量的调整。,调整循环变量,然后再去。初始化循环变量,接下来执行。循环语句执⾏完后,再去执⾏。

2024-01-31 10:12:15 468

原创 c语言分支语句

在if else语句中,会出现嵌套的形式,比如在else后的语句2中在一些情况下(根据题目)会来一个if else语句。注意break,break的作用是跳出switch语句,没有break的话代码会继续执行就会执行下面的case语句。switch后的expression的结果不是value1,也不是value2的时候,就会执行default语句。这时在语句1的位置就要加上{}。表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。如果,表达式中的条件成立就输出语句1,不成立就是输出语句2。

2024-01-30 21:59:08 452 1

原创 gitee(码云)git did not exit cleanly (exit code 1)报错解决办法

相信很多小伙伴在使用gitee时都碰到过这个问题,网上的解决办法有的看着很复杂,那么我在这里分享一个简单的办法。3 再在编译器中创建新项目粘贴之前传不上去的代码,之后在本地仓库就可以上传gitee了。重新clone一个本地仓库(之前的文件都在里边 不要担心文件没了)2 重新clone一个本地仓库的文件 (之前的文件不会消失)先把之前clone的本地仓库放进回收站(防止文件找不回来)之后在编译器中,再创建的新项目就可以上传了。把之前的本地仓库放回收站。

2024-01-29 19:47:14 1769 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除