自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【数据结构】排序详解(希尔排序,快速排序,堆排序,插入排序,选择排序,冒泡排序)

元素集合越接近有序,直接插入排序算法的时间效率越高时间复杂度:O(N^2)空间复杂度:O(1),它是一种稳定的排序算法4.稳定性:稳定希尔排序是对直接插入排序的优化当gap>1时都是预排序,目的是让数组更接近有序。当gap==1时,数组已经接近有序,这样排序就会很快。这样整体而言,可以达到优化的效果希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在不同书上给出的希尔排序的时间复杂度都不一样冒泡排序是一种非常容易理解的排序时间复杂度:O(N^2)

2024-05-21 16:55:25 888

原创 【数据结构】快速排序(详解)

在待排序的序列中,选择一个元素作为基准元素(key)。这个元素可以是序列的第一个元素、最后一个元素或者任意一个元素,甚至是随机选取的一个元素。:从序列的一端开始(可以是左端或右端),将遇到的第一个比基准元素小(或大)的元素填入坑中,并形成一个新的坑。在非递归版本中,我们使用栈(或队列)来保存待排序的子数组的起始和结束索引,而不是直接递归调用;:一个记录序列的开始的下标(left),另一个记录序列的末尾的下标(right)。:此时,基准值左边的所有元素都比基准值小,基准值右边的所有元素都比基准值大。

2024-05-21 16:53:45 1072

原创 【数据结构】单链表逆置(详解)————四种方法

逆置就是把最后一个数据提到最前面,倒数第二个放到第二个……依次类推,直到第一个到最后一个。由于链表没有下标,所以不能借助下标来实行数据的逆置,要靠空间的转移来完成链表的逆置,这里采用没有头节点的链表来实现逆置。

2024-05-17 18:38:39 482 2

原创 树的概念与结构(详解)

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分为M(M>0)个互不相交的集合T1,T2,......,Tm,其中每个集合Ti(1<=i<=m)又是一颗结构与树类似的子树。每颗子树的根节点有且只有一个前驱结点,可以由0个或多个后继结点因此,树是递归定义的注意:树形结构中,子树之间不能有交集,否则就不是树形结构​​​​​。

2024-05-17 13:43:07 986

原创 二叉树OJ题解2(相同二叉树,对称二叉树)

若不相同则两个二叉树一定不同,若相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同。这是一个递归的过程,因此可以使用深度优先搜索,递归地判断两个二叉树是否相同。如果一个树的左子树与右子树镜像对称,那么这个树是对称的。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。如果两个二叉树都不为空:(那么首先判断它们的根节点的值是否相同)如果两个二叉树中有且只有一个为空:则两个二叉树一定不相同。每个树的右子树都与另一个树的左子树镜像对称。如果两个二叉树都为空:则两个二叉树相同。

2024-05-04 13:41:28 212

原创 二叉树的实现(详解,数据结构)

设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。二叉树的存储类似链表,可以由前面的结点找到后面的结点,因此二叉树的销毁也是由后向前销毁会方便很多,所以我们。的知识,就是先将根结点入队,判断队列是否为空,循环将队首元素出队的同时队首元素子节结点入队。根据完全二叉树的定义,具有n个结点的完全二叉树与满二叉树中编号从1~n的结点一一对应。

2024-05-04 13:25:44 1028

原创 二叉树oj题解1(最大深度,单值二叉树)

一棵树的所有节点都有相同的值,当且仅当对于树上的每一条边的两个端点,它们都有相同的值(这样根据传递性,所有节点都有相同的值)。因此,我们先检查节点和子节点是否相同,后使用分治的实现,检查左右子树是否是单值二叉树,是返回true,否返回false;如果我们知道了左子树和右子树的最大深度 len1 和 len2,那么该二叉树的最大深度即为。如果二叉树每个节点都具有相同的值,那么该二叉树就是。为根节点到最远叶子节点的最长路径上的节点数。只有给定的树是单值二叉树时,才返回 true。使用分治的思想来实现计算。

2024-04-30 20:34:02 151

原创 浅谈TopK问题(堆的应用,文件处理,堆排序)

这些排序方法就不适用了,就比如当数据到达10亿时,再使用冒泡排序,它的时间复杂度就相当恐怖了,这时我们就要用到。,如果我们按上述操作对堆顶元素进行替换,那么也只能不断更新这个最大值,我们能使用的方法有很多,就比如比较简单的冒泡排序,他的时间复杂度是。的性质来满足我们的TopK了,这时它的时间复杂度是。在文件data.txt中找出前K个最大的数据。,循环完成后小堆就剩下前K个最大的数据。堆实现思路:(前K个最大的数据)找出最大或最小的前K个数据。找最大建小堆,找最小建大堆。个数据建大小为K的小堆。

2024-04-30 17:25:32 487

原创 堆(数据结构)

只要满足以下两个条件,就是堆(Heap)

2024-04-19 13:52:31 1418

原创 [Leetcode]用栈实现队列

int size;}Stack;//创建栈return tmp;//入栈exit;//出栈exit;return s;//栈的销毁free(tmp);tmp = NULL;

2024-04-18 13:38:36 441

原创 [Leetcode]用队列实现栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop和empty实现MyStackint pop()int top()truefalse。

2024-04-18 13:17:38 606

原创 设计循环队列(队列oj)

循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。// 返回 false,队列已满。// 返回 true。// 返回 true。// 返回 true。// 返回 true。// 返回 true。// 返回 true。思路:数组,构造大小为K+1的数组,(

2024-04-17 11:14:52 695

原创 队列的解释和实现

队列(Queue)是一种特殊的线性数据结构,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以又称为先进先出(FIFO—first in first out)线性表。

2024-04-17 10:58:41 422

原创 栈的oj题解(有效的括号)

判断字符串是否有效。

2024-04-16 16:28:10 195

原创 栈的解释和实现

栈(Stack)是一种遵循后进先出()原则的数据结构。在栈中,元素的添加和移除都发生在同一端,这一端通常被称为栈顶(Top)。栈底(Bottom)是栈的另一端,通常元素不会从栈底添加或移除。

2024-04-16 16:21:28 426

原创 【id:21】【20分】E. 抄袭查找(结构体+指针+函数)

定义一个函数,返回值为一个整数,参数是两个结构体指针,函数操作是比较两张试卷的每道题目的答案,如果相同题号的答案相似度超过90%,那么就认为有抄袭,函数返回抄袭题号,否则返回0。相似度是指在同一题目中,两个答案的逐个位置上的字符两两比较,相同的数量大于等于任一个答案的长度的90%,就认为抄袭。每张试卷包含:学号(整数类型)、题目1答案(字符串类型)、题目2答案(字符串类型)、题目3答案(字符串类型)在一行中,把发现抄袭的两个学号和题目号输出,只输出第一次发现抄袭的题号,数据之间用单个空格隔开。

2024-03-21 22:35:57 290 5

原创 顺序表和链表的比较(详解)

顺序表和链表都属于线性表,逻辑上是线性结构,但是物理结构上,顺序表物理结构是(内存空间)连续的,而链表不是(内存空间)连续的这样的结构差异就造成了顺序表支持按下标访问元素,而链表就不支持相反链表也有优点,在从头插入元素时,链表会比顺序表方便很多,因为在头插过程中,顺序表需要将后面的元素都向后挪一位,而链表仅需简单插入即可。

2024-03-21 16:32:14 354

原创 【id:10】【20分】D. 三串合一(指针与字符数组)

连续三行,每行输入数字a和b,表示每个子串的开始和结束位置。注意字符串的位置是按照一般意义从1开始计算,和编程中的数组位置不同。例如字符串abcdefg,开始位置是3,结束位置是5,那么子串就是cde。3. 使用动态数组的方法创建新的字符串,并且使用指针读取三个字符串的不同部分,并且复制到新字符串中,要求整个过程都不能使用数组下标。输入三个字符串,通过指针读取各个字符串的子串(子串是指字符串中连续的一小部分),把它们合并成一个新字符串。2. 输入后,根据三个字符串的子串的长度,计算出新字符串的长度。

2024-03-20 21:31:49 163

原创 【C语言】实现通讯录(详解)

为了方便后期的处理数组大小,所以我们可以利用宏来实现这个功能#define NAME_MAX 100//联系人姓名最大长度#define ADDR_MAX 100//联系人地址最大长度#define GENDER_MAX 10//联系人性别最大长度#define TELE_MAX 12//联系人电话号码最大长度2.0功能分化(

2024-03-20 21:27:52 420

原创 atoi函数详解

1、该函数首先会丢弃尽可能多的空白字符,直到找到第一个非空白字符,然后,从这个字符开始,取一个可选的初识加号或者减号,后跟尽可能多的十进制数字,并将他们返回一个int类型的数值。2、若该字符串是在整数的字符后包含其他字符,则这些字符将会被忽略,返回其他字符之前的整数,并且不会对该函数造成任何影响。3、若该字符串中第一个非空字符序列表示有效的整数,或是一个空指针,或只包含空白字符,则不执行任何转换,并且返回零。注意:该函数的返回值为int类型的整数,转换后的值不可超出int可表示的范围。

2024-01-26 20:29:25 438

原创 浮点数在内存中存储

对于64位浮点数(双精度浮点数),最高的1位存储符号位S,接着11位存储指数E,剩下的52位存储有效数字M。对于32位浮点数(单精度浮点数),最高的1位存储符号位S,接着8位存储指数E,剩下的23位存储有效数字M。1. (-1)^S表示符号位,当S=0,V为正数,当S=1,V为负数。同理,十进制的-5.0,可以表示为S=1,M=1.01,E=2。那么,根据上面V的格式,可以得出S=0,M=1.01,E=2。2. M表示有效数字,M是大于等于1,小于2的。整数的存储方式和浮点数的存储方式是不一样的。

2024-01-26 18:31:16 514

原创 大小端(C语言)

1.大端(Big-Endian):高地址存放低位2.小端(Little-Endian):高地址存放高位例如:0x11223344在内存中存储。

2024-01-26 12:20:48 383

原创 内存函数的模拟实现(含memcpy,memmove(补齐memcpy缺陷,实现自我拷贝))

可以看到,memcpy内部实现只是单纯的进行地址内容的赋值操作,并没有对重叠区域进行处理。这就会导致到dst和src的地址存在重叠时,拷贝异常。memcpy函数相较于strcpy优点是能实现各种类型数据的拷贝。所以当面对arr1和arr2有内存重叠时用memmove更加合适。期待输出:0 1 0 1 2 3 4 7 8 9。实际输出:0 1 0 1 0 1 0 7 8 9。输出:0 1 0 1 2 3 4 7 8 9。

2024-01-24 15:56:36 423

原创 字符串函数模拟2

【代码】字符串函数模拟2。

2024-01-24 14:43:18 305

原创 strtok函数详解

第二步:strtok(NULL,arr2)--------> arr1 "zhangsan\0163\0com" char*s="163" 记录"com"位置。第三步:strtok(NULL,arr2)---------> arr1 "zhangsan\0163\0com" char*s="com"4.strtok函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数将保留它在字符串中的位置。

2023-12-23 11:28:15 489

原创 字符串函数的模拟

strlen函数展示:strcpy函数展示:strcat函数展示:strcmp函数展示:

2023-12-17 22:28:53 117

原创 使用函数指针数组实现转移表的代码(例如:实现计算器)

测试样例:

2023-12-08 22:18:09 142 1

原创 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

2023-12-07 13:54:24 21

原创 判断一个字符串是否为另外一个字符串旋转之后的字符串

继上期左旋字符串,本期探讨一个字符串是否为另外一个字符串旋转之后的字符串写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 =AABCD和s2 = BCDAA,返回1给定s1=abcd和s2=ACBD,返回0.AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAAAABCD右旋一个字符得到DAABC。

2023-12-07 13:16:32 333

原创 字符串左旋

实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDA。ABCD左旋两个字符得到CDAB。

2023-12-03 15:32:22 106 2

原创 strcmp函数

(const作用是为了保证不改变数组) strcmp会将两个字符串中的字符一个一个比较直到一方比另一方大或者小(该函数的排列方法是根据对应位置字母按照26字母的顺序来排列)下面就让我们用一串代码来解释一下该函数的使用:(下面举例的函数涉及到qsort函数的使用,如有疑问请看作者前几期有关qsort函数的博客)当碰到字符类数组的排序时,strcmp函数的使用就不得不提到了,下面我们就来介绍该函数的用法。strcmp是字符串函数,使用过程中需要。引用头文件<string.h>

2023-11-25 16:49:15 72

原创 C语言 strlen与sizeof的区别

这里arr1长度是7而不是6也证明了在计算机中实际存在"\0",只是隐藏了。为了strlen与sizeof更好的编译,最好引用头文件string.h。(不包括字符串末尾的'\0')sizeof是单目操作符,能计算任意类型变量的长度,返回值类型为。strlen是函数,且只能使用来计算字符串的长度,返回值类型为。,并不是变量的实际长度,计算过程中遇到''\0''停止。strlen计算的是向计算机。而sizeof计算的就是。

2023-11-25 16:24:41 141

原创 C语言实现对浮点数取整及四舍五入

如果说你的编译器支持C99标准,那么可以直接用round()函数;该函数的作用就是将一个小数四舍五入为整数。功 能: 返回大于或者等于指定表达式的最小整数。功能: 函数返回不大于arg的最大整数值。C语言中向下取整的函数为floor(),C语言中向上取整的函数为ceil(),,则将整数后面的数据抹除;,则直接将当前整数加一;floor(x)返回的是。ceil(x)返回的是。

2023-11-23 17:09:35 342

原创 qsort函数的使用

/计算数组元素个数 40 / 4 = 10。我们在使用冒泡排序法做题的时候,经常会遇到运算次数过多程序超时的情况,而且冒泡排序法只能对整形数组进行排序。看不懂没关系,由于是C初阶,会使用即可。//sizeof(arr[0]) - 数组中每个元素的大小,以字节为单位。//arr - 指向要排序的数组的第一个元素的指针。//sz - 由 arr 指向的数组中元素的个数。//compar - 用来比较两个元素的函数。

2023-11-22 22:21:01 406

原创 【id:393】【20分】E. 实验5-6 使用函数求素数和

题目描述本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。输入两个正整数m和n(1≤m≤n≤500),求m和n之间的素数和。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。要求定义并调用函数prime(p)判断p是否为素数,当p为素数时返回1,否则返回0。定义并调用函数prime_sum(m,n),该函数返回区间[mn]内所有素数的和。输入。

2023-11-19 14:21:38 206

原创 【id:389】【20分】D. 实验5-10 使用函数统计指定数字的个数

要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。例如countdigit(10090,0)的返回值是3。本题要求实现一个统计整数中指定数字的个数的简单函数:输入两个整数number和digit(0<=digit<=9),统计并输出整数number中数字digit的个数。

2023-11-19 14:19:38 190

原创 【id:83】【20分】C. 亲和数(函数)

一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。编写一个函数amicable_number(a,b),该函数判断给定的两个数a b是否是亲和数。编写一个函数amicable_number(a,b),该函数判断给定的两个数a b是否是亲和数。对于每组测试实例,如果A和B是亲和数的话输出YES,否则输出NO。对于每组测试实例,如果A和B是亲和数的话输出YES,否则输出NO。

2023-11-19 14:17:23 172

原创 扫雷小游戏

当学完二维数组后,我无意间发现其和棋盘无比的相似,于是便想写个扫雷来试试由于扫雷可分解成多个部分来实现,且分为三个文件实现首先要打印初始界面再负责选择函数(由于考虑到要多次玩,所以使用do-while循环,以及switch-case)这时就到了最重要的部分(实现游戏的代码)扫雷扫雷,我们首先得要有棋盘吧,该部分就是设置棋盘,进而通过play()函数实现此部分就是游戏中的主要框架,而其中细微部分就要更多的函数实现。

2023-11-12 17:15:57 143 2

原创 C语言const关键字详解

const修饰的变量并不会存放在全局(静态)区,而是取决于它定义的地方,局部定义的就存在栈区,全局定义的就存放在静态区。

2023-11-11 13:44:21 109 1

原创 有关数组倒序

i < 10;i++) {i--,j++) {//关键步骤i < len;i++) {return 0;

2023-11-01 17:47:55 82 1

空空如也

空空如也

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

TA关注的人

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