- 博客(51)
- 收藏
- 关注
原创 python使用pip进行库的下载
现如今有太多的python编译软件,其库的下载也是五花八门,但在作者看来,无论是哪种方法都是万变不离其宗,即pip下载。pip是python的包管理工具,无论你是用的什么python软件,我们都可以用pip进行库的下载。
2024-12-23 22:26:50
2414
原创 【数据结构】【线性表】栈在算术表达式中的应用
栈如何在算术表达式中应用?中缀表达式如何转为后缀表达式?只会算四则运算?带函数等的高阶算术表达式如何运算?通过本篇内容,我们解决一个看起来简单其实比较复杂的算术表达式的计算,区别于其它只讲述了四则运算的文章,本篇文章更加注重实用性,可计算函数,指数等,拓展性强,可根据需求设计计算指数,乘方甚至虚数等。需要注意的是该文章更加注重作者解决该问题的过程,更加注重解决算术表达式的计算问题,有一定理解难度,需要对线性表,栈,结构体,枚举等有一定了解。
2024-12-23 21:04:49
1244
原创 【C语言】动态内存管理:详解malloc和free函数
在C语言编程中,动态内存分配是一个非常重要的概念。与静态内存分配不同,动态内存分配允许程序在运行时根据需要分配和释放内存,从而更加灵活地管理内存资源。特别是在一些数据结构的引用中经常需要使用,下面我们就详细讲解一下malloc函数和free函数。mallocmalloc和free是C语言中进行动态内存管理的两个核心函数。正确使用它们能够提高程序的灵活性和效率,但也需要注意潜在的内存管理问题,如内存泄漏和悬垂指针。通过遵循最佳实践和编写健壮的代码,可以有效地管理和利用动态内存,提升程序的稳定性和性能。
2024-12-22 14:38:12
447
原创 【C语言】常用函数及头文件(建议收藏,陆续更新)
想要提升自己的编程速度,了解C语言常用的一些头文件及其库函数是必不可少的过程。目录前言stdio.h输入函数输出函数文件操作函数main.h基本三角函数指对数函数舍入和取整函数stdlib.h内存管理类型转换随机数生成排序和搜索string.h总结以上是作者最常使用的C语言头文件及其常见函数,如果读者对其它头文件有需求,可以留言,作者会在该文章基础上更新。如果对某个函数用法不清楚,作者建议使用一些AI软件去解析相关函数,或者私信或评论作者。
2024-12-22 13:59:01
992
2
原创 【C语言】特殊指针汇总
C语言的指针有多种类型,除了常用的那几类之外我们还有多种特殊指针会使用到,接下来我会介绍一下四种特殊指针,特别是空指针和野指针,在实际的编程中会经常遇到。
2024-12-20 19:57:32
469
原创 【C语言】一文讲通 &和*
在 C 语言中,和是两个非常重要的符号,它们在指针、内存管理和函数参数传递等方面起着关键作用。对于许多初学者来说,理解这两个符号的含义和用法可能会有一定的难度,但只要理清它们的关系和用途,就能够轻松掌握这部分知识。本文将详细讲解和的作用、使用场景,并通过实例帮助大家理解。是取地址符,获取一个变量在内存中的地址。是解引用符,用于访问指针指向的内存中的值。它们通常配合使用,用来获取变量的地址,用来通过指针访问地址处的值。使用和时,需要确保指针指向有效的内存地址,否则会出现运行时错误。通过理解并掌握和。
2024-12-20 19:56:10
1511
原创 【C语言】常见的scanf()接收异常及注意事项
scanf只是把缓存区的内容取走了,换行符却还在缓冲区中,因此下一次执行scanf时直接把换行符当输入取走了。我们需要在输入之后清除这个换行符,我们可以用getchar()这个函数,getchar会从缓冲区取走一个字符。如果缓冲区没有内容,则和scanf类似,需要我们键盘键入,但重要的是其输入只能是一个字符。作者在DEV C++中使用是没有问题的,但不同编译器不确定,因此需要注意。可能很多朋友们不知道,scanf是有返回值的,scanf的返回值是。这个函数的实际用法是接收一个字符,其返回值是。
2024-12-19 19:12:50
691
原创 【C语言】头文件”“和<>的详解
无论是哪种方式,其根本目的还是为了找到相应的头文件,<>常用于系统库头文件的引用,""常用于自定义头文件,其本质区别在于搜索头文件的目录上。两者并非一成不变的,可以根据使用者的习惯灵活使用。
2024-12-19 19:12:16
919
原创 【C语言】指针数组和数组指针
指针数组和数组指针是C语言中经常混淆的两个概念,虽然他们的名字相似,但其含义却完全不同。指针数组:是一个数组,其元素都是指针。例如,表示一个包含5个元素的数组,每个元素都是指向int类型的指针。数组指针:是一个指针,它指向一个数组。例如,表示一个指向包含5个int类型元素的数组的指针。其实我们在大多数情况下,很少使用数组指针,因为数组指针的定义形式不如直接用int a[5]更为方便;但指针数组却在需要储存多个地址的时候经常被用到,例如字符串和二维数组。示例程序。
2024-12-18 20:00:00
217
原创 【小白51单片机专用教程】protues仿真独立按键控制LED
本课程面对纯小白,因此会对各个新出现的知识点在实例基础上进行详细讲解,有相关知识的可以直接跳过。课程涉及,所有涉及知识都将建立在实例的基础上放心食用。
2024-12-18 20:00:00
1076
原创 【C语言】指针常量和常量指针详解
指针常量和常量指针是两个完全不同的概念,其核心是表示不同内存访问权限。常量指针指针地址可改,指向的值只能读;指针常量指针地址不可改只能读,指向的值可以改。
2024-12-17 20:15:00
445
原创 【小白51单片机专用教程】protues仿真流水灯
该篇内容在硬件设计上没有太多特别,具体设计思路在protues仿真C51入门教程自定义函数以及如何用函数粗略实现定时。流水灯是多个小灯泡依次点亮,视觉上像流水一样。[储存类型符] [返回值类型符] 函数名([形参说明表])函数语句体储存类型符:一共有四种,一般情况下不写,这里不详细讲解返回值类型符:值函数运行完需要返回的东西,例如我们主函数main的返回值为void,表示空,不返回任何东西函数名:自定义函数名字,大致要求是由大小写字母或下划线组成,不能太长,第一个字符不能是数字,具体要求自行搜索。
2024-12-17 20:00:00
1497
原创 【C语言】拆解C语言的编译过程
学习C语言的过程中,涉及到各种各样的关键词,在我们点击编译的时候,都会做什么呢?让我们来拆解一下C语言的编译过程包括预处理、编译、汇编和链接四个主要步骤。每个步骤都有其特定的任务和输出文件类型,通过这些步骤,源代码被逐步转换为可执行的机器码。
2024-12-16 20:34:26
394
原创 【小白51单片机专用教程】protues仿真AT89C51入门
外设电路一般用IO口进行控制,我们先了解一下51单片机的IO口,查看手册可以获得以下消息P0口P1口P2口P3口51单片机的P0~P3口分别代表8位IO口;通过手册的信息我们可以知道,P0是漏极开路型双向IO口;而P1~P3是内部上拉电阻双向IO口。双向IO口说明该IO口可以用于输入或者输出两种用途。接下来简单讲一下漏极开路和内部上拉电阻。如果详细将漏极开路和内部上拉的话需要耗费大量的时间,这里只针对该IO口简单讲一下在这里的实际作用。漏极开路:漏极开路指的是场效应管。
2024-12-16 20:33:14
2806
原创 微分方程的叠加定理
微分方程的叠加定理适用于线性微分方程。该定理表明,对于任何线性微分方程,如果其右侧有多个已知的源项(即非齐次项),那么每个源项对应的特解之和也是原方程的一个解。换句话说,线性微分方程的解可以通过对各个源项的特解进行线性叠加得到。具体来说,设有线性非齐次微分方程LyfxLyfx其中,LLL是线性微分算子,yyy是未知函数,fxf(x)fx是已知的非齐次项。如果我们有两个源项f1xf_1(x)f1x和f2xf_2(x)f2x。
2024-12-03 20:06:02
1551
原创 【数据结构】【线性表】特殊的线性表-字符串
在大多数人看来,字符串仅仅是一个char类型的数组,但在作者看来,数组也是一种特殊的线性表。回想顺序表、顺序栈、顺序队列这些都和数组有着千丝万缕的联系。但在我们这里要讲的字符串,它的格式不仅仅是数组格式,数组格式只是串格式的众多种类中的一种。我们回顾。
2024-12-03 09:00:00
1072
原创 【数据结构】【线性表】一文讲完队列(附C语言源码)
队列对于元素本身只需要存储数据和next指针,但对于整个队列,非常重要的是队列的队头和队尾指针,因此在这里我们需要创建两个结构体,一个是元素结点的结构体,记录元素的数据和next指针,另一个是队列的结构体,记录队列的队头指针和队尾指针。类似的,队列可以仿照顺序表的物理结构存储方式实现顺序队列,我们也可以仿照链表的存储方式实现链式队列.同样的,链式队列也有带头结点和不带头结点的区分。将队列的头尾相接,构成循环队列,如此构建,哪怕队头和队尾指针都向一个方向增长,我们都可以让队列的每一个空间都可以利用到。
2024-11-24 19:13:05
1769
原创 【数据结构】【线性表】栈的顺序存储实现(附C语言源码)
在之前的内容中我们讲过,栈也是线性表的一种,它和顺序表以及链表的区别不在存储结构上,而是在删除和插入的操作上,栈只允许在其一端进行插入或删除的操作。这里需要注意的是,顺序结构里的出栈,不会真正的删除该元素,元素数据还保留在原来的内存中,只是从逻辑上删除了,top相当于一个盖子,让栈不会越过盖子访问下一个内存,视为删除(出栈)将顺序栈初始化为空栈,为了清除顺序栈中元素数据,可以先遍历将各元素的data设置成一个特定的值,并将栈顶指针设置为负数(因为非空栈的栈顶指针必定为非负数)
2024-11-21 21:15:00
520
原创 【数据结构】【线性表】【练习】反转链表II
我们发现2的next没用,因此我们先修改2的next(将3的next给2);这里需要注意的遍历,不知道你们有没有发现,就在链表的位序而言,start和then位置已经交换了,其实start已经可以视为向前一位了,遍历的时候只需要更改then指向4即可,也就是then=start->next.这是我们要的效果,但在实际操作中要十分注意你的操作顺序,这里涉及到三个结点,且要对每个结点的next都进行改变,同样的,我们也要用三个指针去操作,我们引入两个新指针start和next。观察上下两幅图,我们需要做的是。
2024-11-20 21:00:00
1568
原创 【数据结构】【线性表】顺序表和链表的比较(附C语言源码)
不同的物理结构让它们在数据运算时的操作逻辑不同,我们可以从几个角度分析顺序表和链表的差别。其实我们可以看到,无论是哪一个,它们都有各种的优缺点,我们根据实际需求进行选择。在这里,我们回顾数据结构的三要素:逻辑结构,物理结构和数据运算。
2024-11-20 20:30:00
443
原创 【数据结构】【线性表】【练习】反转链表
有聪明的同学已经想到,那么我加一个指针cur,在p改变next之前,cur先行一步,到达下一个结点,等p改完next再跟上cur不就可以了?给你单链表的头指针head以及两个整数left和right,其中left
2024-11-18 20:24:31
1212
原创 C语言中的字符串
在C语言中,字符串实际上是以字符数组的形式存储的。字符数组以字符‘\0’(空字符)结束,表示字符串的结束。// 定义一个可以容纳99个字符的字符数组。
2024-11-17 22:14:07
237
原创 【数据结构】【线性表】【练习】删除链表倒数第n个结点
回顾链表结点的删除,最重要的步骤是:找到要被删除的结点的前驱结点,修改其next指向要被删除结点的后继结点。,将虚拟头指针的next指向原链表的第一个结点,暂时供链表使用。在使用完成后,注意输出时的结点要从虚拟头结点的next结点,摒弃头结点,保持输入输出链表结构的一致性。L为头结点,它和其他结点没有本质上没有区别,但其本身不存储数据,它的next指针指向第一个结点,从第一个结点开始才算链表的真正数据主体。这里我们需要注意,这里的L不是结点,只是一个指针,它没有next,而是直接指向第一个结点。
2024-11-17 21:00:00
1452
原创 【数据结构】【线性表】静态链表(附C语言源码)
一段连续的空间,用数组下标去代替指针有天然的优势。和其他的链表相比,静态链表最重要的特点就是结点的结构体指针换成了整型变量。其实很简单,因为这里的整型变量表示的是结构体数组的下标,下标要是非负数才有实际意义,因此我们可以用负数去表示指针的NULL。链表是物理结构为链式的线性表,其每个结点的存储位置不一定是连续的,每个结点依靠结点元素的中的指针线性相连。但有时候为了方便管理内存空间,会将链表的各个结点存储空间放在一块,其实现方式类似于数组,只不过由传统的数据类型改为结构体类型。
2024-11-15 19:52:36
477
原创 【数据结构】【线性表】循环链表(附C语言源码)
循环链表其实很简单,无论是之前的单链表还是双链表,链表结尾结点的next都指向NULL,简单来说就是非循环链表就是一条线,循环链表就是将表尾和表头的两个结点连接起来,构建成一个环。循环链表的结点插入和删除都不需要考虑边界问题了,循环链表不仅仅是原来的线性结构了而是一个环状,每个结点都可视为中间的结点,可以不考虑头结点和尾结点的边缘问题。循环链表一个简单的改变让链表的操作变得更加多元和便捷,例如。
2024-11-15 19:49:55
346
原创 【数据结构】【线性表】双链表(附C语言源码)
在学习单链表指定结点的前插操作和删除操作时,我们遇到一个困难是难以找到其前驱结点,如果需要找到其前驱结点则需要遍历单链表,这样使得其时间复杂度从原本的O(1),直接变成了O(n),因此单链表的不可逆性在需要逆向检索时及其不方便,因此我们在构建结点的结构体时,也像记录后继结点的指针next一样,添加一个前驱结点的指针prior,如此可以在任意结点双向遍历检索结点。前者在插入过程中需要关注结点的数据,而后者只需要关注结点的prior和next,因此在后续的代码展示中,均以直接插入结点的方式展示。
2024-11-14 20:35:56
474
原创 【数据结构】【线性表】单链表4—单链表的建立(附C语言源码)
按位序插入,位序说明本身就链表就已经存在,一般是用在某一个单链表的某个位置进行插入,指定结点插入分前插和后插,由于单链表的不可逆性,前插操作需要找到前驱结点,这个过程需要经过类似于按位序插入的遍历结点的过程,比较复杂,而指定结点的后插只需要指定结点,一切顺理成章,操作简单,时间复杂度低。每次我们都将结点插入到头部,相当于一个倒序插入,而每次插入到尾部即为顺序插入,如果插入到中间则是无序,无序的线性表一般来说没有意义,因此我们用的最多的是头部插入和尾部插入,同时尾部插入又是最常用的插入方式。
2024-11-12 18:36:02
941
原创 【数据结构】【线性表】单链表3—单链表的删除(附C语言源码)
按位序删除,则将链表中第i位的结点删除,由于链表是物理结构为链式存储的线性表,其存储内存不连续,依靠结点中元素数据中的指针数据指向下一结点,因此要删除第i个结点,只需要将第i-1的结点的指针数据指向i+1即可,注意最后释放第i个元素得到空间。找前驱结点的目的是将前驱结点的next指针更新为p的next,我们不找前驱结点,将p的next指向的结点的数据换到p中,p的next更新为next指向结点的next,完成偷天换日。不带头结点的单链表在i=1时没有i-1的结点,无法进行正常操作,需要特殊处理。
2024-11-11 21:45:00
661
原创 【数据结构】【线性表】单链表2—单链表的插入(附C语言源码)
我们也可以通过另一种方法,不找前驱结点,不改变前驱结点的next,而将新结点插入到指定结点的后面,再将指定结点与插入的新结点的所有数据交换,玩一手偷天换日。按位序插入,则在链表的第i位插入一个结点,由于链表是物理结构为链式存储的线性表,其存储内存不连续,依靠结点中元素数据中的指针数据指向下一结点,因此要插入一个结点到第i个位置,只需要找到第i-1个元素,将其指针数据给插入结点的指针数据,并将自己的指针数据更新为指向i即可。将指定节点的原有的指针数据给插入结点,并更新现在的指针数据指向插入结点。
2024-11-10 20:37:50
522
1
原创 【数据结构】【线性表】单链表1—概念即创建(附C语言源码)
由于有头结点的单链表具有天然的代码优势,因此在后续的内容中,如没有特殊说明,则代表该单链表为有头结点的单链表。两种,就链表定义而言,不需要头结点也是一个完整的链表,但在实际的运用中发现,没有头结点的单链表在继续数据运算时代码相对复杂(在链表的插入删除中可以体现,后文会讲),因此我们可以采用有头结点的单链表,使得代码简便的同时更加统一。由于单链表的物理存储结构是链式的,而不是顺序表的连续空间,因此在表示链表时,只说明头指针,指向链表的第一个结点,结点元素的next指针指向下一个结点构成链表。
2024-11-09 16:07:27
746
原创 【数据结构】【线性表】顺序表概念及其基本操作(附C语言源码)
线性表是一个抽象的概念,一般具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长。(是不是感觉类似数组,但数组不是线性表,但也具有线性表的一些特性)线性表指的是数据元素通过线性的逻辑结构连接的一种数据结构。数据元素之间是线性关系,形如A->B->C…->N基本概念空表n=0,线性表长度为0位序线性表中第i个数据元素表头元素线性表中第一个数据元素表尾元素线性表中最后一个数据元素。
2024-11-08 22:51:42
837
原创 【数据结构】算法和算法评价-时间复杂度和空间复杂度分析
算法和算法评价算法的基本概念定义:给定计算问题,算法是一系列良定义(定义明确无歧义)的计算步骤(计算机可实现的指令)算法的特性有穷性 算法必须在有限步数内输出结果确定性 算法必须没有歧义可行性 可以机械的一步步的执行的基本操作步骤算法的优劣性比较正确性 能够正确的求解出问题可读性 能够帮助人理解健壮性 能够对不良输入作出处理或相应的反映,而不会莫名其妙输出结果高效性与低存储量性算法的时间复杂度时间复杂度 事先预估算法的时间开销T(n)与问题规模n的关系
2024-11-03 21:23:30
402
原创 C语言中的字符串输入输出
在C语言中,字符串是字符数组的一个特殊形式,用于表示文本数据。本文将详细介绍字符串的输出函数。函数存在安全隐患,因为它不检查输入长度,可能导致缓冲区溢出。)函数,我们可以轻松实现字符串的输入和输出。函数用于将字符串输出到标准输出设备(通常是屏幕)。函数用于从标准输入设备读取一行字符串。函数会限制输入的长度,从而避免缓冲区溢出的问题。上述代码中,程序提示用户输入一行文本,然后使用。,并通过示例帮助初学者理解如何使用这些函数。输出到屏幕,并自动在字符串后添加换行符。函数输出用户输入的内容。
2024-09-25 23:47:22
1169
原创 C语言中的字符输入输出
这个程序不断读取用户输入的字符,直到用户按下Ctrl+D(Unix系统)或Ctrl+Z(Windows系统)表示结束输入。在C语言中,字符输入和输出是基本的操作。函数用于将一个字符输出到标准输出设备(通常是屏幕)。函数用于从标准输入设备(通常是键盘)读取一个字符。:这段代码提示用户输入一个字符,并使用。输出字符’A’,并随后输出换行符。,并通过示例说明如何使用它们。输出用户输入的字符。
2024-09-24 22:58:12
636
原创 C语言中的转向语句
在C语言中,转向语句用于改变程序的执行流。主要的转向语句包括gotobreak和continue。它们各自有不同的用途和特性,能够在特定情况下简化或优化代码。本文将深入探讨这些语句,并通过复杂示例展示其应用。
2024-09-24 22:56:24
357
原创 C语言中的循环结构与语句
循环结构是编程中的基本概念,用于重复执行特定代码块,直到满足某个条件为止。C语言提供了几种主要的循环结构,包括forwhile和do-while语句。此外,循环可以嵌套使用,以处理更复杂的逻辑。本文将详细介绍这些循环结构及其使用方式。
2024-09-18 23:12:13
904
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人