自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 避雷 :C语言中 scanf() 函数的错误❌使用!!!

因为今天又在scanf函数上栽了跟头,所以今天终于决定将scanf容易踩的抗自我做一个总结。格式控制字符串里的空格、制表符和换行符会匹配输入中的任意空白字符序列。其他非格式说明符的字符必须和输入中的字符精确匹配。函数可能会因为输入不匹配、文件结束等原因失败,要对这些情况进行适当的错误处理。读取输入后,输入缓冲区可能会残留一些字符(如用户输入了回车->换行符。),要留意防止缓冲区溢出。才能把输入的值存储到变量所在的内存位置。要注意输入格式和顺序,防止出现意外结果。),这可能会对后续的输入操作产生影响。

2025-03-19 11:04:15 587 2

原创 C语言_数据结构总结9:树的基础知识介绍

二叉树是一种特殊的树形结构,其特点是每个结点至多有两棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒,若将次序颠倒了,则成为了另一棵不同的二叉树,另外即使树中结点只有一棵子树,也要区分它是左子树还是右子树。只要把一棵树的根结点删去就成了森林,反之,只要给m棵独立的树加上一个结点,并把这m棵树作为该结点的子树,则森林变成了树。- 高度为h,有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树中的编号为1~n的结点一一对应时,称为完全二叉树。

2025-03-15 16:33:50 679

原创 C语言_数据结构总结10:二叉树的递归/非递归遍历

遍历是二叉树各种操作的基础,例如对于一棵给定二叉树求结点的双亲/求结点的孩子/求二叉树的高度/求叶结点个数/判断两棵二叉树是否相等……所有这些操作都是在二叉树遍历的过程中进行的。因此必须掌握二叉树的各种遍历过程,并能灵活用以解决各种问题。常见的遍历次序有:先序,中序,后序->其中“序”是指根结点何时被访问。先序:根结点->左子树->右子树中序: 左子树->根结点->右子树后序: 左子树->右子树->根结点对于递归遍历还是很好实现的,如。

2025-03-15 16:03:52 656

原创 C语言_数据结构总结8:链式队列

  纯C语言实现,不涉及C++  。链队列队列的链式表示称为链队列,它实际上是一个同时具有队头指针和队尾指针的单链表,头指针指向对头结点,尾指针指向队尾结点。头结点是链式队列中的特殊结点,通常不存储实际的队列元素数据,其主要作用是方便对队列的操作,例如在进行入队、出队操作时,可以统一操作逻辑,无需特殊处理队列为空的情况。它作为队列的头部标识,其next指针指向队列中的第一个真正存储数据的结点。尾结点在链式队列中,尾结点是最后一个存储有效数据的结点,它的next指针被设置为NULL链式队列基本操作实现。

2025-03-09 09:32:52 556

原创 C语言_数据结构总结7:顺序队列(循环队列)

简称队,也是一种操作受限的线性表。只允许表的一端进行插入,表的另一端进行删除针对顺序队列存在的“假溢出”问题,引出的循环队列概念。将顺序队列臆造为一个环状的空间,即把存储队列元素的表从逻辑上视为一个环。当队首指针Q->front=MaxSize-1 后,再前进一个位置就自动到0,这可以利用除法取余运算(%)来实现。显然,队空的条件是Q.front == Q.rear。但若入队元素的速度快于出队元素,则队尾指针很快就会追赶上队首指针。

2025-03-09 09:07:22 1024

原创 C语言_数据结构总结6:链式栈

因为链式栈的各种操作(如入栈、出栈、获取栈顶元素等)都需要通过头结点来访问栈中的元素,调用者持有头结点的指针后,就可以直接将其作为参数传递给这些操作函数。值传递的复制操作会消耗一定的时间,尤其是在结构体较大或者频繁调用判空函数的情况下,会对程序的性能产生影响。因为判空操作仅仅是读取栈的信息,不涉及对栈结构的修改,所以即使采用值传递,也能正确完成判空的逻辑。:在链式栈的初始化操作中,返回头结点的指针是一种常见且推荐的做法,但并不是绝对必须的,value:用于存储出栈元素的值,是一个指向元素类型的指针。

2025-03-08 16:26:15 1013

原创 C语言_数据结构总结5:顺序栈

前言:是只允许在一端进行插入或删除操作的线性表。:允许进行插入或删除的那一端:固定的,不允许进行插入或删除的那一端后进先出:1. 顺序存储(顺序栈) 2. 链式存储(链式栈)在顺序栈的基本操作中,决定是传入一级指针还是只传入栈的变量,主要取决于操作是否需要修改栈的内部状态。当操作需要修改栈的内部状态,比如改变栈顶指针 top 的值或者修改栈中存储的数据时,就需要传入一级指针。

2025-03-08 16:02:21 1085

原创 C语言_数据结构总结4:不带头结点的单链表

纯c语言实现,不涉及C++每次插入新节点时,将新节点的 next 指针指向当前链表的头节点,然后更新链表的头指针,使其指向新节点。当链表不为空时,需要先遍历到链表的尾部,然后将新节点连接到尾部节点的后面。这样新节点就成为了链表的第一个节点,插入操作的时间复杂度为 O(1)。对于不带头结点的单链表,需要考虑链表为空的特殊情况。若删除的是其他节点,需要找到该节点的前一个节点。当链表为空时,新插入的节点就是链表的头节点;若要删除的是头节点,需要直接更新头指针;是每次都将新节点插入到链表的末尾。

2025-03-07 21:28:41 601

原创 C语言_数据结构总结3:带头结点的单链表

纯c语言代码,不涉及C++带头结点的单链表的基本操作,有完整代码和运行截图

2025-03-07 21:10:06 720

原创 c语言scanf()函数报“c996 scanf this function or variable may be…“错误

但每新建项后要用到scanf()函数,都要在代码顶部加上该注释,步骤3: 将以下定义加在预处理器定义中的最后一行中,然后点击。所以建议使用第二种方式,一个项目只需用第二种方式配置一次。步骤4:点击应用,点击确定后完美解决。注意原有的配置不要删了。

2025-03-07 10:17:14 199

原创 C语言_数据结构总结2:动态分配方式的顺序表

例如插入操作都需要将插入位置之后的元素依次后移,删除操作都需要将删除位置之后的元素依次前移,查找操作也都是通过遍历或者直接定位来完成。:两种顺序表都是将数据元素依次存储在连续的内存空间中,都可以通过数组下标来直接访问元素,时间复杂度为 \(O(1)\)。:在编译时就确定了顺序表的最大容量,使用数组来存储元素,数组的大小在程序运行过程中不能改变。:可以根据需要动态地调整顺序表的容量,理论上只要系统有足够的内存,就可以不断地插入新的元素。:顺序表的最大长度是固定的,一旦达到最大长度就无法再插入新的元素。

2025-03-05 16:46:06 577

原创 C语言_数据结构总结1:静态分配方式的顺序表

/给顺序表SQList起别名为SqList。//顺序表当前的长度(元素个数)即:即返回第pos个位置(数组下标为pos-1)对应的value值。然后将第pos个后的数据都往前移一个位置,填补第pos个位置。8. 打印顺序表(格式2:最后一个元素末尾没有空格打印)即:将第pos个的值赋值给value后腾开第pos个位置。7. 打印顺序表(格式1:每个元素后都有空格打印)即:即返回value值的位序,即第几个,下标加1。是一个数组,并非动态分配的内存,所以不能使用。:由于顺序表采用的是静态分配方式,

2025-03-04 21:40:59 258

原创 C语言复习8:动态内存分配

修改空间大小(注意是开辟的新/原先的空间) void realloc(void * 指针变量,修改之后的大小size);2. malloc()函数返回的是void类型的指针,没有步长的概念,也无法获取空间中的数据,需要强转。9. realloc()函数修改之后的空间,地址值有可能发生变化,也有可能不会改变,但是原先的数据不会。7. free()函数释放完空间后,空间中的数据叫做脏数据,可能被清空,可能被修改为其他值。10. realloc()函数修改之后,无需释放原来的空间,函数底层会进行处理。

2025-03-02 21:33:37 318

原创 C语言复习6:内存,指针,二维数组

内存地址以64位的二进制表示,即最大内存地址为2^64次方,地址范围:0~2^64,最大支持的内存:2^64(字节) --> 17,592,186(GB) --> 17,179(TB)特点:无法获取数据,无法计算,但是可以接收任意地址,可以接受任意类型指针记录的内存地址。,内存地址以32位的二进制表示,即一共有2^32次方,大概42亿多个不同的地址 --> 4GB内存。缺点:void类型的指针,无法获取变量里面的数据,也不能进行加/减的计算。- 定义格式2:先定义一维数组,再将一维数组加入二维数组内。

2025-03-02 21:28:16 516

原创 C语言复习7:结构体,内存对齐,共同体

## 结构体 - 格式: struct 结构体名字{ 成员1; //例如:char name[100]; 成员2; … }; - 起别名格式 typedef struct 结构体名字{ 成员1; 成员2; …

2025-03-02 21:08:08 444

原创 C语言复习5:字符串的定义,字符串的常用函数

这个函数可能过时了,提示过时了的话,就使用控制台提示的函数,一般是:_strlwr。* 这个函数可能过时了,提示过时了的话,就使用控制台提示的函数,一般是:_strupr。- 细节3:用定义2定义的字符串,只能读取不能进行更改,且里面定义的字符串是可以复用的。- 细节2:数组的长度要么不写,如果要写的话,记得把结束标记的空间给预留出来。1. 细节:把第二个字符串中的全部的内容,拷贝到第一个字符串的末尾。- strlen:获取字符串的长度(这个函数统计长度的时候,是不计算结束标记的)

2025-03-02 21:01:16 448

原创 C语言复习4:有关数组的基础常见算法

3. 如果要查找的值在mid的左边,缩小范围时,min不变,max等于mid - 1。4. 如果要查找的值在mid的右边,缩小范围时,max不变,min等于mid + 1。- 分块的原则1:前一块中的最大数据,小于后一块中所有的数据(块内无序,快间有序)- 在分块查找的核心思路上,面对的是无规律的数据,在进行分块时,确保每块数字无交集。1. 相邻的元素两两比较,大的放右边,小的放左边。(默认排成从小到大)从0索引开始,拿着每一个索引上的元素跟后面的元素依次比较,小的放前面,大的放后面,以此类推。

2025-03-02 20:53:41 472

原创 c语言复习3:函数,随机数,内存,数组

2. 64位操作系统,内存地址以64位的二进制表示,即最大内存地址为2^64次方,地址范围:0~2^64,最大支持的内存:2^64(字节) --> 17,592,186(GB) --> 17,179(TB)* 另外,定义的初始最大值不能是0,一定得是数组中已经存在得值(怕数组存的值都是负数,但最后运行得出的最大值是0),一般都是把0索引当作最大值。1. 种子不变,随机数的结果就是固定的,如果想随机变化,就可以让时间充当种子,即 `srand(time(NULL));`),数组名表示的就是完整的数组。

2025-03-02 20:45:28 892

原创 C语言复习2:键盘录入,字符串变量定义,流程控制语句

2. 法二 点击项目名 - >属性 -> 配置属性 -> C/C++ -> 预处理器 -> 在预处理器窗口右边,点击预处理器定义,将 `_CRT_SECURE_NO_WARNINGS`加到最后一行(注意上边的配置不要删了)- 如果没有,就会继续执行下面的代码,直到遇到了break,或者把整个switch中的代码全部执行完了,才结束。:不能单独书写,只能写在switch/循环中,表示结束,跳出的意思。scanf("%d %d %d ……- 在C语言中,没有单独的字符串变量,但可以利用字符数组来存字符串。

2025-03-02 20:35:51 830

原创 C语言复习1:常量,变量,运算符,进制,类型转换

十六进制 101 -> 1*16^0 + 0*16^1 + 1*16^2 = 256。八进制 101 -> 1*8^0 + 0*8^1 + 1*8^2 = 65。例如:二进制 101 -> 1*2^0 + 0*2^1 + 1*2^2 = 5。- 当小数点前面/后面为0时,0可以省略不写 eg:`.93=0.93` / `19.=19.0`- 参数1:必填,输出内容的最终形式,以字符串的形式体现(格式控制符/或叫占位符)- 单独使用时,++和--放在变量的前边/后边,与单独写一行结果是一样的。

2025-03-02 20:22:52 863

原创 Visual Studio 2022 常用快捷键

取消多行的单行注释,按住alt键,用鼠标左键竖着选中注释符,点击删除键即可。2. 多行注释符号:/*注释内容*/1. 单行注释符号://多行注释最好不要嵌套。

2025-03-02 10:59:21 220

原创 Visual Studio 2022新建c语言项目的详细步骤

新手使用Visual Studio 20222新建c语言项目的详细步骤如果还想重复步骤5进行添加.cpp文件夹,记得把之前源文件下的main()函数注释掉,否则新建的编辑环境运行会报错!”路径,一般建议存放除C盘外的盘,例如D盘新建“vs_projects”文件夹,然后存放。(一个源文件下只能有一个入口函数 ,即源文件下main()函数只能有一个)” (在window终端运行代码。默认打印"Hello World")-->输入自己想取的文件名后,点击“--> 在弹窗中选择“

2025-03-02 10:43:17 1162 1

原创 tomcat10 maven

【代码】tomcat10 maven。

2025-02-18 10:22:37 95

原创 plugin org.apache.maven.plugins not found完美解决

plugin org.apache.maven.plugins not found完美解决

2025-02-11 13:47:10 693

原创 利用maven搭建完web环境后,如何在pom.xml中编写servlet依赖范围配置

利用maven搭建完web环境后,如何在pom.xml中编写servlet依赖范围配置

2025-02-11 10:31:53 433

原创 社区版idea搭建Javaweb项目的保姆级教程

(本文以 IntelliJ IDEA Community Edition 2023.1.7 为例)默认1.已安装社区版 idea2.已在官网http://www.apache.org下载好了 Tomcat简单说明:方法一:适用于Servlet3.0版本以下的,如有需要请查看:方法二:适用于Servlet3.0及以上版本。(JavaEE6开始才支持Servlet3.0版本)

2024-11-27 17:19:28 3366 1

原创 软件设计模式------抽象工厂模式

抽象工厂模式(Abstract Factory Pattern),又称Kit模式,属于对象创建型模式。一:先理解两个概念:(1)产品等级结构: 即产品的继承结构。 @通俗来讲,就是不同品牌的同种具体电器2)产品族: 在抽象工厂模式里,产品族是指同一个工厂生产的,位于不同产品等级结构的一组产品。 @通俗来讲,就是相同品牌旗下的不同电器产品

2024-10-18 20:11:24 973 2

原创 软件设计模式------工厂方法模式

在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,则工厂子类负责生成具体的产品对象,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

2024-10-18 09:03:54 1157

原创 软件设计模式------简单工厂模式

在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责其他类的实例,被创建的实例通常都具有共同的父类。

2024-10-14 21:23:12 1097 1

原创 软件设计模式------概述

是一套被反复使用,多数人知晓,经过分类编目的,代码设计经验的总结。(通俗来说,软件模式可以认为是对软件开发这一特定“问题”的“解法”的某种统一表示。

2024-10-14 16:38:11 551

原创 软件设计模式------面向对象设计原则

设计原则名称简单说明实现方法补充说明1.开闭原则OCP要求一个软件实体应当对扩展开放,对修改关闭。即在不修改源代码的基础上扩展一个系统的行为1、将不变的部分加以抽象成接口2、若发现原有接口不足之处,则定义新的接口3、模块之间的调用通过抽象接口进行(好处,即使实现层发生改变,也无需修改调用方的代码)如果一个系统在扩展时只涉及修改配置文件,而原有的Java/C#代码没有做任何修改,则该系统即可认为时一个符合开闭原则的系统。2.单一职责原则SRP一个类只负责一个功能领域中的相应职责。

2024-10-09 17:39:02 747

原创 社区版 idea 搭建 Javaweb 项目(详细教程)

(本文以 IntelliJ IDEA Community Edition 2023.1.7 为例)默认1.已安装社区版 idea2.已在官网http://www.apache.org下载好了 Tomcat。

2024-09-27 17:49:31 8508 12

原创 软件设计模式------类之间的关系

在软件系统中,类不是孤立存在的,类与类之间存在相互关系。

2024-09-25 09:29:24 689

原创 对XML的基本介绍

构成:开始标签,元素内容,结束标签(空元素可以没有结束标签,但必须在起始标签的“>"前加一个"/"正斜杠)javaweb快速入门--如果是空元素的话,则可以写成构成:属性名="属性值"68

2024-09-21 12:47:54 983

原创 TypeScript----基础类型

有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined和null。元组Tuple:允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。,表示由此类型元素组成的一个数组,第二种方式是使用数组泛型,第一种,可以在元素类型后面接上。

2024-06-19 15:04:11 446

原创 四:链式栈的实现(附带运行截图,亲测有效)

链式栈和带头结点的单链表很像,只是栈要遵循“先进后出”的基本原则,而且只能在一端进行插入和删除操作。

2024-05-26 20:56:02 272

原创 三:顺序栈的实现(附带运行截图,亲测有效)

当n个不同的元素进栈时,元素越多,则出栈的顺序越多样化,这时我们可以用到。,即:当n个不同元素进栈时,出栈元素不同排列的个数为。

2024-05-26 10:44:50 219

原创 二:单链表的实现(附带运行截图,亲测有效)

typedef struct LNode {//定义一个结点结构//数据域//指针域,next是下一个结点的地址(1)注意:LNode *相当于LinkList(2)搞清楚带头结点和不带头结点的区别(下面按顺序分别是带头结点链表,不带头结点单链表)

2024-04-23 21:44:44 661

原创 一:顺序表的实现--静态分配方式(附带运行截图,亲测有效)

【代码】一:顺序表的实现--静态分配方式(附带运行截图,亲测有效)

2024-04-21 20:16:35 211 1

原创 一:顺序表的实现--动态分配方式(附带运行截图,亲测有效)

【代码】一:顺序表的实现--动态分配方式(附带运行截图,亲测有效)

2024-04-21 17:38:07 175 1

空空如也

空空如也

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

TA关注的人

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