- 博客(14)
- 收藏
- 关注
原创 零零碎碎——字符串变量与字符串常量
当⼏个指针指向同⼀个字符串的时候,他们实际会指向同⼀块内存。但是⽤相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。所以创建了数组的指针不同,str3和str4相同。我们可以理解为,创建了个储存hello bit.的字符串储存到只读区,而str3的地址相当于h的地址。第一种相当于创建了个数组,数组里存储的是hello bit.C/C++会把常量字符串存储到单独的⼀个内存区域,第二种相当于一个指针的值与h的地址相等。str4的指针也是等于h的指针。而数组名代表的是h的地址。
2025-10-25 20:30:14
137
原创 数据结构09——排序02
但是局限性很大,如:如果数字是1,10001,10002,10005,那么我们就要创建有10005个整形数据的数组,我们会发现这样代码的空间冗余是很大的。本章的冒泡排序采用了优化,可以降低时间复杂度,通过引入exchange,在每次循环前都将exchange置为0,如果期间进行排序了就置为1,如果循环完毕以后exchange还为0,那就代表没有进行过排序,这就代表数组是有序的,那么我们无需再进行排序。keyi是基准值,我们将数组分为两部分,基准值的左边部分和基准值的右边部分。我们先说第一种采用递归的方法。
2025-10-09 12:04:26
230
2
原创 数据结构07——二叉树
在这一张我们主要运用到了递归,递归确实很难,但我们要有自信,多加练习。此外,我们还运用到了队列,结合前不久我们做的算法题会发现其实栈和队列的可玩性还是很高的,所以我们要多考虑栈和队列。层序遍历我们要运用到队列,我们可以发现队列和栈这两种结构其实并不简单,可玩性还是比较高的,以后有机会我们着重讲一讲,由此,我们的栈和队列也要经常练习。结构体应该包括我们想要存储的数据和与别的节点的关系,这里我们关系采用父节点和左孩子节点与右孩子节点的关系。我们一般存储的是字符型的数据,所以我们要先。5,二叉树节点的个数。
2025-10-08 20:06:14
213
原创 数据结构08——排序01
例如,现在我手中有三张牌,分别是:A,2,5.现在我抽到了一张3,我会挑选一个合适的位置进行放入,放入后变成了:A,2,3,5.如果我再抽到一张4呢,我又会进行选择合适位置插入,这样我每次插入新的元素之后都是一个递增或递减的数组。我们先将数组分为gap份,每份进行直接插入排序,然后我们再gap=gap/3+1,再将数组分为gap份,再进行直接插入排序,直到最后当gap等于1时就是一个直接插入排序了。由此,我们知道了,当数组接近有序的时候时间复杂度会很低,由此,我们得到了希尔排序。希尔排序的时间复杂度为。
2025-09-20 19:44:31
311
1
原创 数据结构番外——堆排序
上回说到,堆有一个重要的特点就是堆顶是堆中数据的极值。那么我们可不可以将堆顶的数据取出来然后再重新建立个堆再将堆顶的数据取出来以此类推。这样的话如果是个大堆的话我们就可以实现由大到小的排序了。那我们来试一试。
2025-09-16 21:38:48
468
原创 数据结构06——二叉树和堆
顺序二叉树也就是堆底层代码是由数组来实现的,类似于顺序表,所以说不是很难。加油,堆有一个显著的特点,那就是堆顶是堆中数据的极值。二叉树结束后就排序了,排序学完我会去学习c++,并且再深入学习c语言,c语言学习完后我将同时学习操作系统和c++。如果我们现在知道了父节点的位置为n,那么他的左孩子的位置为2n+1右孩子的位置为2n+2.顺序二叉树的底层代码依靠数组实现,所以顺序二叉树的大部分代码和顺序表类似。如果我们知道孩子节点的位置的,那么他的父节点的位置为(n-1)/2。三,顺序二叉树的代码实现。
2025-09-16 20:53:59
330
原创 数据结构05——队列
我们先考虑时间复杂度:我们要实现在队尾插入数据与在对头出数据,无论数组的前端是插入数据还是出数据时间复杂度都是O(N),而链表呢,我们一般只考虑单链表,因为双链表的空间占用较大,只要特殊情况才会考虑。链表的时间复杂度高主要是因为我们不知道尾节点的地址,那如果我们储存一下尾节点的地址呢,很显然这样时间复杂度会降为O(1),所以我们选择使用链表来实现队列的底层结构。1,队列的底层是链表,所以我们要有链表节点,那么我们就需要进行链表节点的开辟。队列最大的特征是先进先出(FIFO),在队尾进入数据,在对头出数据。
2025-09-12 21:57:01
260
原创 数据结构04——栈
接下来讨论空间复杂度:拿整形来举例,在数组中存储一个整形一般只需要4个字节,而在链表中我们还要存储每个节点的指针,所以所需的空间肯定不止4个字节。所以存储相同的数据链表需要更大的空间,所以数组的空间复杂度更优,所以我们选择数组来进行栈的底层实现。栈是一种特殊的线性表,他的逻辑结构和物理结构都是线性的。我们先来讨论时间复杂度:往数组的一段插入数据我们的时间复杂度可以做到o1,同时往链表的一段插入数据我们的时间复杂度也可以做到o1。栈由数组来实现,顺序表也由数组来实现,所以说栈和顺序表是类似的。
2025-09-11 21:53:02
464
原创 数据结构03——双向链表
之前我们学习了单项链表,如果我们想要实现在pos节点前插入的的操作我们就要从头开始遍历,这样时间复杂度会很高,这是因为我们的单向链表只有一个指向下一个节点的指针而没有指向前一个节点的指针。在学完单链表后再学习双链表就会觉得很容易,主要是因为双链表多了个指向前一个节点的指针,这样与单链表相比不用遍历链表去寻找前一个节点,因此双向链表的插入和删除极为方便快捷。7,接下来我们要进行删除操作,由于删除的时候链表必须不能为空,所以我们要先检验链表是否为空,接下来的操作是检验链表是否为空。13,删除pos节点。
2025-09-11 18:01:53
312
原创 数据结构02——单链表
在顺序表中如果我们想要实现头删和头插操作此时一般会有O(n)的时间复杂度,而链表就可以很好的解决这个问题,但是呢,在链表中进行尾插和尾删的操作同样也会有O(n)的时间复杂度。本篇文章围绕单链表的查找,打印链表,头删,头增,尾删,尾增,创建新的节点,在指定的节点前插入新的节点,在指定的节点后插入新的节点,以及删除pos节点和删除pos之后的节点,链表的销毁展开。单链表中的节点有两部分组成,一个是要储存的数据另一个是指向下一个节点的指针。10,在指定的节点之前插入节点。11,在指定的节点之后插入节点。
2025-09-07 21:30:08
161
原创 数据结构01——顺序表
其实顺序表不算难,主要要掌握指针和动态内存管理,剩下的就很简单了,对了还有一个难点是将代码写规范,如果不考虑代码规范性和健壮性其实写起来就很简单这些代码,但是这样会降低代码的可读性并且让代码漏洞百出。2,定义好结构体后就要进行初始化(初始化要进行传地址,因为刚创建完结构体结构体没有值,没有值是不能进行传值的)物理结构:顺序表的底层是靠数组实现的,内存空间是连续的,所以在物理结构上是线性的。逻辑结构:我们可以抽象成一条线,所以顺序表在逻辑结构上是线性的。10,在指定的位置进行删除。9,在指定的位置进行插入。
2025-09-05 17:40:38
352
2
原创 vs中头文件的使用
1,.h头文件的作用,.h相当于目录,用来定义结构和声明函数。需要包含必要的头文件,如#include<stdio.h>,函数声明要加分号。2,第二个.c的作用用来进行定义函数,要包含刚才定义的头文件,例如:#include"test.h".这个.c只包含这个.h就可以。3,第三个.c的作用用来调用函数,测试文件只用#include"test.h"就可以。
2025-09-04 15:30:29
128
原创 如何使用scp在手机上实现文件互传
2,如果要输人很长的文件路径时,需要在不同的名称之间加上“/”,例如我要表示文件夹下的元文件时,则具体路径就为:wenjianjia/yuan。3,如何获得ip地址,须在设备上输入ifconfig,此时会出现一堆东西,往下滑,看到inet旁边的就为ip地址。
2024-11-27 15:52:02
825
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅