c语言
文章平均质量分 82
库库森
这个作者很懒,什么都没留下…
展开
-
归并排序(递归,非递归)
归并排序,除了递归,你一定想要知道非递归是怎样实现的!原创 2022-03-31 14:04:31 · 2626 阅读 · 3 评论 -
选择排序(选择排序,堆排序)
两种选择排序!原创 2022-03-25 22:23:41 · 1551 阅读 · 1 评论 -
插入排序(直接插入和希尔排序)
直接插入排序,优化直接插入的希尔排序!你值得拥有!原创 2022-03-24 21:06:10 · 3316 阅读 · 0 评论 -
二叉树的基本内容(创建,遍历,节点个数,深度计算)
二叉树从创建到销毁,满满的递归!原创 2022-03-22 12:29:40 · 5111 阅读 · 1 评论 -
堆结构的两个重要应用(topk问题,堆排序)
堆结构体有什么用?堆排序 & topK 你值得拥有原创 2022-03-19 21:42:46 · 1498 阅读 · 1 评论 -
堆结构实现完全二叉树
堆实现完全二叉树(主要有调堆方法实现以及堆删除元素)!快来看看吧!原创 2022-03-17 20:58:30 · 1093 阅读 · 3 评论 -
设计循环队列(LeetCode:622.设计循环队列)
简单的接口调用实现循环队列!快来看看吧!原创 2022-03-16 15:40:03 · 1536 阅读 · 0 评论 -
初阶数据结构之队列
写在前面的话:小伙伴们大家好啊!上篇文章我们提到了栈这种数据结构。那么我们知道,栈是属于先进后出的一种数据结构,那么本文将为大家带来的是另一种分格不同的先进先出的数据结构,队列。一,什么是队列1.1队列基本结构一种线性表,支持一端插入,一端删除的特殊线性表。支持插入的那一端称为队尾,而支持删除的的另一端称为队头。如下图所示:1.2队列实现结构那么我们知道,对于队列这样的先进后出的结构,如果我们用顺序表实现,那么对于删除将会比较麻烦,因为顺序表如果是删除的话,则需要将后面原创 2022-03-15 17:18:32 · 702 阅读 · 0 评论 -
带头双向链表解析
带头双向循环链表!妈妈再也不用担心我学不会链表了!原创 2022-03-13 15:07:28 · 645 阅读 · 0 评论 -
LeetCode:138. 复制带随机指针的链表(含原码实现)
带随机指针的单链表的深度拷贝!干货满满鸭!原创 2022-03-12 12:28:37 · 1735 阅读 · 3 评论 -
链表带环之双指针,入口节点问题
小小的难度,满满的干货,冲鸭!原创 2022-03-11 14:18:10 · 517 阅读 · 0 评论 -
浅尝链表带环问题(LeetCode:141,142 环形链表)
浅尝链表带环,为什么需要用双指针?原创 2022-03-10 22:28:22 · 1026 阅读 · 2 评论 -
手把手教你学会简单的链表相交问题(LeetCode 160 .相交链表)
一首歌的时间学会链表相交问题,交给我啦!原创 2022-03-07 23:12:19 · 2525 阅读 · 6 评论 -
链表回文(牛客网:OR36 链表的回文结构)
看完之后,会回文和不会回文的都沉默了!原创 2022-03-07 09:35:40 · 1000 阅读 · 1 评论 -
“小朋友大人排队”问题(十分钟带你玩转 牛客网 CM11 链表分隔)
目录前言情景化分析一,案例题目分析1.1题目要求1.2题目解析二,思路分析1.2 第一步思路1.2之后步骤三,源码分享前言小伙伴们大家好啊!今天小编为大家带来一篇牛客网上,有关链表分隔的一道相对比较复杂的题目。虽然大家可能对单链表已经见怪不怪了,因为我们确实接触到了很多有关单链表的操作,比如单链表的合并,查找单链表某个指定节点,以及删除单链表指定位置的元素。情景化分析有时候在特定的场合我们有以下做法:这就相当于我们排队,大家都是随便排的.原创 2022-03-06 21:32:34 · 631 阅读 · 2 评论 -
深究单链表合并(案例:LeetCode:21.合并两个有序链表)
目录前言一,案例题目分析1.1 LeetCode 21.合并两个有序链表1.2图画实例1.3思路分析1.3.1需要用到的指针1.3.2整体思路二,案例代码分析2.1 某个链表为空2.2整体循环2.3最后多于节点链接三,原码四,总结前言小伙伴们大家好啊!我们知道,对于链表而言,其实有时需要同数组一样,将所有元素进行有序合并,以便后续对数据进行分析。那么对于单链表而言,因为涉及到指针域 next 的问题,合并序列也将变得比较复杂。那么.原创 2022-03-05 23:44:01 · 1167 阅读 · 2 评论 -
牛客网:链表中倒数第 k 个节点
目录前言题目规律总结思路步骤一:步骤二:步骤三:代码实现前言小伙伴们大家好啊!今天小编为大家带来一篇牛客网上有关链表的题目:链表中倒数第k个节点。题目如下图所以。其实该题目,我们仔细看的话,可以发现,也就是单链表查找节点,只不过是有一点变形的,因为这里不是单纯的查找第几个,而是倒数第几个节点。然后题目中也表明,涉及到了双指针问题,其实很多单链表的题目都是需要双指针来完成的。规律总结因为需要返回的是倒数第k个节点,所以我们用两个指针..原创 2022-03-05 18:28:40 · 568 阅读 · 0 评论 -
LeetCode:876. 链表的中间节点
目录前言题目规律思路首先:链表节点数为奇数其次:链表节点数为偶数代码实现前言小伙伴们大家好,今天依旧为大家带来一篇力扣上有关单链表的题目:链表的中间节点。题目那么我们废话不多说,首先来看题目:如上图所示,我们需要将一个链表的中间节点返回,如果链表的个数是偶数的话,我们就需要返回第二个节点。规律对于该题,其实我们是有一个规律的,那就是用两个指针,然后在两个指针同时指向首节点的情况下,快指针 fast 一次 “走两步”,慢指针 slow原创 2022-03-05 16:52:38 · 320 阅读 · 0 评论 -
LeetCode:206. 反转链表
前言:小伙伴们大家好,今天小编为大家带来一篇力扣上与链表有关的一个题目:反转链表。顾名思义,该题需要我们将原有的一个链表的所有元素都取原创 2022-03-05 00:28:38 · 200 阅读 · 0 评论 -
LeetCode:203. 移除链表元素
目录前言题目思路问题1问题2问题3力扣代码实现总结:前言小伙们大家好!今天小编为大家带俩一篇力扣上有关删除链表元素的题目:移除链表元素。题目如下:题目如上图所示,题目中要求我们删除单链表中等于 val 的节点,然后返回头指针。那么我们发现,其实这个删除就与单链表中的指定位置删除节点差不多。思路那么分析完题目之后,其实我们发现,这里还是需要分为两种情况去分析的,首先就是头节点就是我们要删除的节点,其次就是其他任意节点。问题1首.原创 2022-03-04 00:31:21 · 290 阅读 · 0 评论 -
单链表基本功能解读
前言小伙伴们大家好,前面的文章对于顺序表我们做了一定的分析。但是我们发现,其实顺序表有一定缺陷的:首先就是开辟的空间可能用不完,会造成空间浪费;其次就是头部或者中间的插入删除时间复杂度是O(N),所以我们认为对于顺序表而言,有些时候我们不应该用它,而是用一种没有以上缺陷的顺序表。再者就是增容的时候申请空间,资源拷贝,然后释放空间会有一定的消耗。那么其实,在线性表中有这样一种结构,它的物理地址是“依次链接”的,而且每个元素在内存中都是随机存放的,如果我们需要新增元素的话,只需要将该元素原创 2022-03-03 22:13:57 · 910 阅读 · 0 评论 -
LeetCode:225 .用队列实现栈
用队列的先进先出实现栈的先进后出!你值得拥有原创 2022-03-02 23:58:46 · 231 阅读 · 0 评论 -
剑指offer 56- I 数组中数字出现的次数
目录前言题目思路第一步第二步第三步代码实现前言小伙伴们大家好!今天 up 主为大家带来的是程序员必刷题之剑指offer中的一道比较简单,但同时又是很重要的一道题:数组中数字出现的次数。题目力扣上题目描述如下所示:好的,那么如上题所描述的一样,该数组中除了两个数字只出现了一次,其他数全部都出现了两次。那么我们就可以理解题目所说的了。其次,该题目要求了时间复杂度以及空间复杂度,所以我们必须得在一定的范围内去做。思路第一步我们知道,有一原创 2022-02-28 00:02:55 · 371 阅读 · 0 评论 -
LeetCode:20. 有效的括号
力扣括号匹配问题(栈实现),稍有难度,但细节满满鸭!原创 2022-02-27 22:42:20 · 294 阅读 · 0 评论 -
LeetCode:26. 删除有序数组中的重复项
目录前言题目思路起始位置:第一次移动:之后移动:代码实现前言小伙伴们大家好,之前为大家分析了一篇力扣上的第二十七题,删除数组中的等于 指定值 的题。本文为大家带来第二篇顺序表相关的力扣题:删除有序数组中的重复项。题目如下图所示:那么我们看到,其实本题相对于上一篇文章的 27题来说,只是删除的对象不同了以及现在的序列是有序的之外,在其他所有方面,都是一模一样的,所以这里我们对于题目就不做过多的赘述了。tips:上篇文章:LeetCo..原创 2022-02-27 12:52:35 · 280 阅读 · 0 评论 -
LeetCode:27. 移除元素
前言小伙伴们大家好,今天为大家带来的是力扣上的比较简单的,有关顺序表的题。首先是第二十七题,移除元素。题目那么首先我们对题目进行分析,如下图所示:这里是说需要我们原地移除数组中等于val的数,也就是说我们不能创建新的数组,因为空间复杂度为O(1)。然后说元素的顺序可以改变,然后不需要考虑数组中超出新长度后面的元素,也就是说我们只需要,将不等于val的值覆盖到前面等于 val的数的位置上面即可。这种做法也是在顺序表中我们删除元素的一种比较常用的方法。思路好的...原创 2022-02-27 11:50:51 · 351 阅读 · 0 评论 -
剖析:顺序表的增删改查
目录前言:一,什么是顺序表1.1顺序表的两种形式1.2动态顺序表二,顺序表增删改查的接口实现2.1结构体空间表示顺序表2.2顺序表的初始化2.2malloc新增空间2.3增加元素2.4删除元素2.5查找元素2.6指定位置元素的插入和删除2.6.1指定位置元素的插入2.6.2指定位置元素的删除前言:小伙伴们大家好,今天小编为大家带来的是关于顺序表的内容,因为我们知道顺序表其实在一些方面运用还是比较多的。虽然对于链表等结构来说,顺序表依旧.原创 2022-02-26 22:16:15 · 920 阅读 · 0 评论 -
LeetCode:消失的数字
前言本文将为大家介绍力扣中一个较为简单的题:消失的数字。好的,原题要求如下: 思路一思路一特点:对于该题,其实是有很多种思路实现。因为该数组是有规律的,首先是 0 ~ n 的所有整数(缺一个),那么说明该数组所有元素(假设所有元素都不缺)的所有元素的和,积都是对固定的。那么如果缺一个数,我们可以通过和或者积的形式对其进行操作。 ...原创 2022-02-19 14:09:20 · 623 阅读 · 0 评论 -
左右旋对比
目录前言一,逆置法1.1逆置思路1.2逆置实现二,左旋和右旋对比 右旋代码分析 特点对比前言之前在up主的博客里面已经有过了对于左旋的三种实现方法。当然,如果我们考虑到时间复杂度的问题,那么我们只要一种方法,那就是逆置法。那么接下来我们分别对于左旋和右旋的中心思想做一个比较。tips:本文对于...原创 2022-02-18 10:33:37 · 569 阅读 · 0 评论 -
辨析:时间复杂度,空间复杂度
目录前言一,时间复杂度1.1基本定义1.2求值方法1.3大O渐进表示法1.4复杂度的三种情况1.5案例解析案例一案例二案例三案例四二,空间复杂度前言因为我们知道,对于一个程序的效率高低,不仅仅看起来简单就是高效,最主要的我们要通过时间复杂度以及空间复杂度去判别其效率高低。而对于时间复杂度,一般衡量的是该程序执行时间的长短,而空间复杂度则表示的该程序运行所需要的额外空间的大小。好的,那么我们了解了关于算法复杂度计算的两个标准了之后,我们进入.原创 2022-02-14 01:14:52 · 759 阅读 · 0 评论 -
“找单身狗”
目录前言一,问题分析二,具体实现1.1实现方法1.2实现代码前言如题目所言,这篇文章的内容是在一组数中寻找只出现一次的数,比如 1234123456,在这组数中, 5和6 只出现了一次,所以我们将其称为“单身狗”,那么如何才能从这组数组中找单个出现的元素呢?其实我们只需要三步即可。1,首先,对所有数字进行异或,然后得到的两个单独的元素的异或值。2,对于这个值,其二进制值一定有一位是不同的,我们需要找到该值,暂且将该值所在的位记为flag。3,所以我们将这个.原创 2022-02-12 21:41:54 · 272 阅读 · 0 评论 -
atoi函数功能以及模拟实现
目录一,atoi函数的基本功能1.1基本功能1.2功能实现二,模拟实现2.1实现过程2.2完整代码一,atoi函数的基本功能1.1基本功能基本格式:int atoi(const char * str)根据其基本格式,atoi函数的基本功能, 为将 str 指向的字符串转化为整形数。也就是将一个原先为一个包含整型数的字符串,将其内容中的整形数抠出来,单独返回,当然,既然是整形数,如果是负数,则会将符号也一起返回。1.2功能实现那么我们了解了其基本功能之后原创 2022-02-12 20:27:58 · 2693 阅读 · 0 评论 -
宏和函数的对比
目录前言 宏的优势 宏的缺点前言我们知道,在C语言中,宏的功能是必不可少的。因为相对来说,宏是简单的,因为宏只在预处理阶段进行操作,之后,程序的进行与宏基本没有什么关系了。而对于函数来说,是需要进行调用的,也即是需要调用函数堆栈的,所以相对来说,函数对于整个程序来说是比较繁琐的。好的,那么我们进入正文。 ...原创 2022-02-11 23:42:30 · 709 阅读 · 0 评论 -
初识-程序环境以及预处理
目录前言一,程序运行的两种环境二,编译及链接2.1初识编译过程2.2编译2.3运行环境三,预处理3.1预定义符号3.2 #define3.2.1define定义标识符3.2.2#define定义宏3.2.3#define替换规则3.2.4 #和###的作用:可以将一个宏参数变为字符串##的作用:将位于其两边的符号合成一个符号3.2.5宏和函数3.2.7关于命名3.3#undef3.4命令行定义3.5条件编译...原创 2022-02-11 21:41:15 · 270 阅读 · 0 评论 -
动态内存管理
目录前言:一,malloc函数与free函数1.1malloc函数基本内容1.2实例分析malloc函数以及free函数1.3free函数基本内容二,calloc动态内存分配函数2.1malloc函数基本情况2.2调试观察calloc函数三,realloc函数3.1realloc函数的由来3.2realloc的基础知识3.3realloc函数代码实现四,柔性数组前言:我们知道,对于C/C++程序内存分配来说:大致可以分为三个大区:栈区,堆区,静原创 2022-02-08 00:17:07 · 464 阅读 · 0 评论 -
牛客网第98:序列中删除指定数字
要求:删除某一整数序列(可能有重复的数字)中指定的数字,删除之后,整个序列中元素的前后位置不发生变化。序列的长度和序列中元素大小均为 1~50 。思路:该整数序列我们可以将其用数组存储,那么我们知道,数组中删除某一元素之后,其之后的元素将依次往前移动一位,此时就达到了我们删除元素之后,序列中元素位置不发生变化的要求。代码实现:#include<stdio.h>int main(){ int n = 0; scanf("%d",&n);//元素个数原创 2022-02-07 17:41:34 · 679 阅读 · 0 评论 -
牛客网第96题:有序序列判断
目录思路1思路2代码实现要求:输入一个序列,判断是否是有序,有序指:从小到大有序或者从大到小有序即可。对于相同的值,认为是有序的。目的:如果有序,输出sorted;否则,输出unsorted对于有序序列的要求:序列长:0~50 序列中数值:3~100思路1一般情况下,我们希望是邻近元素两两比较,然后分别进入两个循环,这两个循环分别为判断降序和升序的循环,一旦进入循环,如果不是所有元素比较完,才出循环,则认为一定不是有序序列。思路2但是对于思路一过于繁琐...原创 2022-02-07 16:56:13 · 730 阅读 · 0 评论 -
牛客网第100题:有序序列合并
目录思路代码实现本文将为大家带来一篇有关有序序列合并的文章。主要内容是:两个有序序列,将两个序列合并后,输出一个有序序列。在此我们规定:1.两个序列中的每个值范围均为:【0~100】2.两个序列的长度均为:【0~50】在开始合并之前:我们通过键盘输入两个升序序列,如图所示:思路首先,该两个序列均为有序序列,所以我们的思路如下:第一步:将两个序列的第一个元素进行比较,假设某一序列的首元素比较大,则将该值打印,然后将序列首元素的位置向后移动一位,指向第二个元素,此.原创 2022-02-07 15:42:22 · 293 阅读 · 0 评论 -
自定义类型二:枚举,联合体
目录前言一,枚举1.1枚举的定义及初始化1.2枚举的优点1.3枚举的使用二,联合体2.1联合体基本内容2.2联合体计算编译器大小端前言我们知道,常量有很多种,比如字面常量,define定义标识符常量,const修饰的常变量,以及今天小编为大家带来的枚举常量。对于联合体,本文也将为大家一一解读。一,枚举什么是枚举:枚举一一列举,比如将某一些相似的内容给放在一起,然后定义一个类型,这就是枚举。枚举关键字为 enum 。1.1枚举的定义及初始化.原创 2022-02-07 00:29:04 · 270 阅读 · 0 评论 -
自定义类型一:结构体及结构体与位段的“渊源”
前言:我们知道,生活中的事物仅仅用C语言规定的数据类型来定义是远远不够的。比如描述一个人,此时我们就需要用到自定义类型中的结构体来描述了。又比如我们需要定义很多常量,如果一味地用define定义,那么看起来会很冗余,而且不方便管理,此时我们就需要用到枚举这个自定义类型。好的,了解了这些之后,我们进入正文,关于自定义类型的内容。一,自定义类型之结构体1.1结构体基础知识1.1.1结构体的声明首先是结构体的声明,初始化以及自引用。如下代码所示:我们声明了一个名为stu的结构体,该原创 2022-02-06 20:43:01 · 300 阅读 · 0 评论