自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头

2025-02-20 22:34:38 404

原创 双向链表代码

在介绍双向链表之前,先介绍一下链表的分类:实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:单向或者双向:带头或者不带头:循环或者非循环:看到有这么多的结构,你是不是以为链表链表会很难学呢,其实在实际当中最经常用的还是两种结构:1.无头单向非循环链表:也就是我们做题中常见的单链表:2.带头双向循环链表:也就是接下来我们要讲到的双链表:我们以带头双向循环链表为例来进行实现:双向链表和单链表结构上的区别就在于双向链表多了一个指向上一个节点的指针。知道这个我们很快就能将双向链表的结

2025-02-11 12:36:35 1199 1

原创 一些链表OJ题及其详解

一些简单的链表OJ题

2025-02-08 13:14:18 6209

原创 【C数据结构】单链表补充

链表的查找,在链表的任意位置增加和删除结点

2025-01-31 18:54:05 311

原创 【C数据结构】链表

显而易见是不可以的,struct SListNode才是结构体的类型,SLTNode是我们定义的结构体类型的别名,但是这个别名是在SLTNode* next后面定义的,就像我们写函数一样,我们在main函数里面调用这个函数,main函数的前面需要有这个函数的定义或者声明,如果没有就会无法调用这个函数。当tail存储的是结点4的地址时,那么再进行tail=tail->next之后,结点4的下一个结点是tail这个结点,而tail是个局部变量,使用完之后是需要销毁的,所以最后结点4指向的下一个结点还是为空。

2025-01-24 13:27:13 1168

原创 【C数据结构】顺序表(下)

这里要注意的是参数问题,这里x的数据类型为什么是int 而不是SLDataType呢,因为使用SLDataType的话我们这里的参数会和其他函数的参数相同,它是会报错的,当然将变量名x改成其他字母也是可以的。顺序表的增删我们就实现了,接下来我们再来实现顺序表的查和改。顺序表的查改是非常简单的,因为我们知道顺序表一般采用数组存储,数组的查改都是非常简单的,它们的时间复杂度都是O(N)。打印的第一行是我们进行头插操作得到的,第二行是我们进行头删操作得到的。2. 删除排序数组中的重复项。3.合并两个有序数组。

2025-01-20 19:24:45 491

原创 【C数据结构】顺序表(上)

顺序表是用一段的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

2025-01-20 14:03:44 277

原创 【C数据结构】空间复杂度

这个算法使用了常数个额外空间(end,exchange,i),所以空间复杂度为O(1),那有人也可能要问这个算法里面不是有数组吗,为什么不是O(N)呢,这是因为这里的数组不是我们这个算法额外创建的,而是我们将算法外的数组的地址传到我们这个算法里面来进行使用的,并不是这个算法额外创建的。每次调用函数都会创建一个额外空间,递归调用了N次,开辟了N个额外空间,所以空间复杂度为O(N)。这个修改后的算法的空间复杂度就是O(N),因为我们在这个算法里动态开辟了一个数组的额外空间。

2025-01-19 23:29:15 233 1

原创 【数据结构】二分查找的时间复杂度

二分查找,也称为折半查找,是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两部分,每次比较中间元素与目标值,如果目标值等于中间元素,则找到;如果目标值小于中间元素,则在左半部分继续查找;如果大于中间元素,则在右半部分查找。这个过程会一直持续到找到目标值、数组为空或者越界为止。由于每次都是对一半的数据进行比较,所以时间复杂度为O(log n),效率较高。最好的情况复杂度很容易计算,那么我们来探讨最坏的情况复杂度是怎么计算出来的:我们以中间值一直大于目标值为例,

2024-12-25 21:51:11 623 4

原创 【数据结构基础】时间复杂度

在计算机科学中,算法的时间复杂度是一个函数(这里的函数是数学中的函数),它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。

2024-12-25 21:48:10 1254 1

原创 C语言——常见字符串函数的使用和模拟实现

介绍strlen,strcpy,strcat,ctrcmp,strncpy,strncat,strncmp,strstr,strtok,strerror等字符串函数的介绍和使用

2024-12-14 22:47:53 1341 1

原创 C语言——对数组的地址解引用为什么得到的是数组首元素的地址

引用文本在C语言中,当你对数组的地址进行解引用时,实际上你得到的是该数组所占据的内存区域的起始地址,这通常被解释为数组首元素的地址。这是因为数组在内存中是连续存储的,而数组名在大多数表达式中会退化为一个指向数组首元素的指针。

2024-11-16 01:55:52 361 1

原创 C语言——数组名的理解,使⽤指针访问数组,⼀维数组传参的本质,⼆级指针,指针数组,指针数组模拟⼆维数组

可以看到,虽然&arr0]和&arr的地址相同,但是将它们加一之后,&arr[0]+1增加的是四个字节,&arr+1增加的是20个字节也就是整个数组所占的字节数,所以整个数组的地址和数组首元素的地址还是有差别的。我们对数组名解引用之后可以看到数组首元素的值跟数组名中存储的值相同,数组首元素的地址和数组名的地址也相同,所以,数组名其实就是数组首元素的地址。我们知道整形数组里面存放的都是整形的元素,字符数组存放的都是字符元素等等,那么,指针数组里面存放的是什么类型的元素呢,当然是指针类型的元素。

2024-11-11 12:02:34 930 2

原创 【C语言】冒泡排序

冒泡排序是一种简单的排序算法,它的基本思想是通过反复交换相邻的两个元素,逐步将较大的数“浮”到数组的顶部,就像气泡不断向上冒一样。这里有一个简化的步骤描述:

2024-11-04 22:03:56 534 1

原创 【C语言】指针的运算

指针加减整数并不是简单的地址加减。因此代码中每执行一次for循环,都会让指针变量p的地址增加四个字节,由于数组的存储是连续的,所以每次循环,指针都会指向数组的下一个元素。在这段代码中,我们定义了一个整形数组arr[9]并将其初始化,接着我们定义了一个整形指针变量p并将数组首元素的地址赋值给了p,那么指针指向的内容就是数组的首元素,接着通过for循环输出打印数组元素,在每次打印完数组元素后将p++。p中存储的是arr[0]的地址,q存储的是arr[8]的地址,所以指针q-指针p之间的元素个数为8.

2024-10-25 22:25:43 990 2

原创 【C语言】const修饰指针函数

用const关键字修饰普通变量并将其初始化后,该普通变量的值不能再被修改。这段代码运行时会出现如下图的报错:这就是我们上面所说的被const修饰的变量的值不能够被修改,但是,当我们了解过指针函数之后,我们就可以通过访问变量的地址来对变量的值进行间接修改,这对const修饰后的普通变量也是适用的。在这段代码中,我们创建了一个整形变量n和一个指针变量p,通过取地址符&将变量n的地址赋值给p,然后再通过寻址运算符*指向p中的地址来获取该地址上内存的数据并修改,这样我们就做到了间接修改变量n的值。

2024-10-17 10:44:19 735 1

空空如也

空空如也

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

TA关注的人

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