自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 类和对象——上篇

public:// 类内直接写函数体public:void say();// 只声明// 类外加 类名::作用域限定对 C++ 已有的内置运算符等),重新定义规则,让它能适配自定义类 / 结构体的运算。运算符重载本质就是函数重载,把运算符当成特殊函数operator。两种形式成员函数重载对象.运算符(参数)如operator=operator==全局(友元)函数重载运算符(左操作数, 右操作数)如 operator <<operator>>赋值运算符重载是类的一个默认成员函数,用于两个。

2026-05-16 21:37:03 443 12

原创 C++入门的前置知识

本文介绍了C++中namespace、缺省参数、函数重载、引用和内联函数等核心概念。namespace用于解决命名冲突,可通过指定、展开或部分展开使用。缺省参数允许函数参数预设默认值。函数重载使同名函数可因参数不同而共存。引用是变量的别名,具有初始化强制、不可更改等特性。内联函数旨在替代宏,通过代码嵌入提升效率,适用于短小函数。文章还对比了指针与引用的区别,分析了const引用的优势,并指出内联函数的使用准则。这些特性共同构成了C++区别于C语言的重要语法特征。

2026-04-27 20:31:55 409 15

原创 归并排序,计数排序,堆排序详解

归并排序和快排可以认为是对偶的关系,快排像是前序,那么归并就像是后序。归并的核心逻辑就是归并,即对于两个有序的数组,两个两个数依次比较,形成有序排到第三个数组中。下面我举一个例子:对于两个有序的数组a[3]={3,6,7}和b[3]={1,4,8},两两比较后可以排成1,3,4,6,7,8存在数组tmp中。这就是归并。他的关键点有两个:1有序,2比较归并试想一下,对于两个都只有?我们直接就可以进行归并,变成含有两个元素的有序数组。那么对于一组数据来说我们重复以上的操作。

2026-04-25 14:55:22 339

原创 插入排序+希尔排序+快排详解(C语言)

快排,正如它的名字一样,是一种效率十分高的排序,他是托尼.霍尔在1960年发明的,那为什么不像希尔发明希尔排序那样用发明者的名字命名呢?有一种说法是这样说的:快排的发明者霍尔对快排非常自信,所以特意为其取名为快排,事实也确实如此。

2026-04-21 19:47:12 327

原创 二叉树——(链式)超详细解析

前言前序遍历前序遍历是一种对二叉树的遍历方法,访问根节点的操作发生在遍历其左右子树之前。这样说起来可能很抽象,下面我们来看一下例子对于如图所示的二叉树,遍历的结果是:8 7 5 1 6 3。

2026-04-08 22:17:50 301

原创 二叉树——堆

上面我们讲到堆虽然不是有序的,但是也有自己的一套排列顺序,大堆(父亲比儿子大)和小堆(父亲比孩子要小),为了满足这个规定我们就需要用某种算法来调整堆,而向下调整就是其中一种,这个算法的思路也很简单,我们让父亲和最小的孩子比较,如果父亲比孩子大(或小)就进行交换,所以下面我们来看一下代码吧!与向下调整类似,向上调整也是为了把数据调整成大堆和小堆,所以说他们的算法思想也是类似的,甚至更加简单,因为从下面往上调整只需要把父亲找到就行了,而父亲就只有一个,并不需要像向下调整那样,用假设法得出小孩子(大孩子)

2026-03-26 19:19:35 383 1

原创 空间复杂度

这个数组是本来就存在的,我们并不是我们这个解决问题的算法开辟的,无论你用哪个算法,它都需要这个数组。和快慢指针的解法基本是一样的,首先定义一个快指针fast和一个慢指针flow,先让快指针向前走k步,再让两个指针同时向前走,直到fast指针走到空。不过我们一般不怎么关注空间复杂度,更多的关注时间复杂度,因为随着技术的发展,计算的内存已经十分充足了,并不需要太在乎内存的消耗。我们可以额外创建一个数组,先把后面K个元素拷贝过来,再把前面的n-k个拷贝到后面,最后再把这个额外开辟的数组拷贝到原数组。

2026-03-02 18:32:24 36

原创 时间复杂度+相关题目

但有要求时间复杂度必须是O(n)所以我们必须考虑是否符合这个要求,我们熟悉的排序算法有冒泡排序(时间复杂度为O(n^n)),快排qsort(时间复杂度为O(n^以十为底n的对数)),.......并没有符合题目要求的。的运算,这就说明当N太小的时候时间复杂度其实就没有什么要比较的必要了,我们需要考虑的是当N非常大的时候的情况。,它定量描述了算法的运行时间。即以二为底n的对数,但因为对数的编写需要专门的编辑器,而且在时间复杂度中,我们碰到的绝大多数都是以二为底的,所以以二为底是可以省略不写。

2026-01-21 11:12:37 479

原创 双向链表(C语言)

首先我们创建一个新的节点,为了先不破坏原有链表中指针的完整性,我们可以调整newnode的指针,把newnode->prev=phead->prev;时有一些细节,首先我们先对newnode的prev和next指针进行调整,这两个指针的调整顺序并不重要,但接下来的调整就要讲究顺序了,一般我们不能先对pos的指针进行调整,因为调整完pos指针后我们就无法通过pos来找到pos的下一个指针进行调整了(当然在双向链表中你也可以通过newnode来找到,不过我说的这种思路以及顺序不能调换的原因你最好还是了解一下)

2025-12-18 21:55:23 1108

原创 初学数据结构之单链表(C语言)

指定一个位置pos,我们要把一个新节点插入到pos之前只需要让pos前的节点的next指针指向新节点,新节点的next指针指向pos即可,所以我们需要找到pos前一个节点。该函数的参数是指向链表头节点的指针,大家可能会对这个循环比较疑惑,我来简单解释一下,while(pcur)表示循环的结束条件是pcur==NILL,pcur==pcur->next表示跳到下一个节点,相当于平时我们用的 i++。相较于尾删,头删的操作要简单很多,不过也不是只要把头节点free()掉就行的,我们还需要改变指向头节点的指针。

2025-12-11 18:53:49 929

原创 基于顺序表实现通讯录项目(C语言)

你要知道头文件之间是不能相互包含的,SeqList.h是顺序表的头文件,我们要在顺序表的基础上实现通讯录项目,所以SeqList.h应该把Contac.h包含。解读:使用for循环遍历数组,并用字符比较函数strcmp进行比较(相同返回0),若遇到匹配的元素则返回该元素的下标,若出了for循环还没有返回则说明不存在该元素,不正常返回-1。首先我们要在原有的顺序表代码的基础上创建头文件Contact.h(用于结构体和函数的声明),Contact.c(用于实现通讯录的相关功能)。和查找联系人是类似的。

2025-12-06 16:00:17 704

原创 初学数据结构之顺序表(C语言)

这也是一个惯用操作,目的是方便后面进行替换,比如你现在不想要int类型的顺序表,想把它改成char类型,只需在typedef这里修改一下即可,而不需要区修改一大片代码,大大节省了时间。我在这里简单解释一下,传值的话我们只能使用传来的这些值,而无法改变传值给函数的实参的值,就像租房子你不能随意对房子进行装修,而买房子的却可以。平时如果我们要对其进行增删查改的话都是根据肉眼判断的,比如你要在该数组中插入一个新的元素,我一般就会直接在5的后面直接插入,因为我们一眼就看到该数组有哪些元素,它有什么特殊的功能呢?

2025-12-03 20:29:44 1070

原创 初识C语言之编译和链接

我们平时在写C语言的代码的时候,会开到文件中有.c为后缀的源程序文件和以.exe为后缀的可执行程序文件。如果你是计算机学院的学生,在大学里编译是作为一门可来学习的。有操作系统的话由操作系统完成,在独立的环境中,如51单片机等等,程序的载入通过手工来完成,也可能通过可执行代码置入只读内存中完成。- 对#inlude<stdio.h>进行处理,将包含头文件中的内容插入到该预编译指令的位置(也就是前面图中有八百行代码的原因)编译器能做的是静态的语义分析,静态的语义分析一般包括声明,类型的匹配和类型的转换。

2025-11-29 17:02:07 282

原创 文件操作的一些细节

处理数据文件,所谓文件缓冲系统就是在内存中自动为程序正在使用的文件开辟一个文件缓冲区,分为输入缓冲区和输出缓冲区,只有当数据装满了缓冲区后,数据才会输入输出。那为什么要存在这样一个缓冲区呢?其实这样一个缓冲区就像一辆货车,只有装满货再送货效率才高。所以文件缓冲区的存在是为了提高操作系统的工作效率。那有人就会问了,如果我没充满输出缓冲区又想把数据输出到文件上怎么办?C语言标准并没有规定fflush可以强制刷新输入缓冲区,fflush一般只对输出缓冲区有作用)ANSI C标准采用。

2025-11-28 18:31:24 242

原创 文件的任意读写

上一篇文章中讲了文件的顺序读写,那么文件能不能任意读写呢?其实也是可以的。下面我将介绍文件任意读写的相关函数(作者是刚入门的小白,欢迎大家指正我的错误)

2025-11-27 21:18:43 276

原创 初学C语言之文件的顺序读写

向stream指向的流中读取一个字符。返回的是文件指示器当前指向的字符,读取成功后,文件指示器会自动向后前进到下一位。把参数character指定的字符输出到FILE*指针stream指向的流中(通常是文件流和标准输出流)FILE*指针stream指向要读取的流。

2025-11-27 20:06:33 666

原创 文件操作(C语言)

本文介绍了文件操作的基本概念和操作方法。首先解释了文件操作的必要性,即持久化保存程序运行产生的数据。文件分为程序文件(如.c、.obj、.exe)和数据文件,文件名包含路径、主干名和后缀三部分。按数据组织形式可分为文本文件和二进制文件。重点讲解了文件的打开和关闭操作:通过fopen函数打开文件并返回FILE*指针,操作完成后用fclose关闭文件。文章还介绍了流的概念和三种标准流(stdin、stdout、stderr),以及文件指针如何指向内存中的文件信息区。最后给出了文件操作的标准代码示例,包括错误处理

2025-11-25 20:09:14 976

原创 自定义类型之结构体

a的对齐数是1,b的对齐数是4,故该结构体的最大对齐数是4,其整数倍为4,8,12.......,显然该结构体的大小为8(选取比该结构体大的第一个最大对齐数的整数)一般创建在main函数的前面(不然编译可能会报警告),方式为struct后面加大括号,大括号里面定义你所需要的变量,值得注意的是括号后面一定要加上';如int 的空间大小是4个字节,与默认8相比较小的是4,所以该变量的默认对齐数是4。默认对齐数是可以修改的,一般修为2的次方数,不能修该为如3,5,7之类的数。下面我们来猜猜这个结构体的大小。

2025-11-18 10:59:24 426

原创 常见的字符函数和字符串函数

在strcmp的基础上加多了num这个参数,从而能够限制比较字符时比较的字符个数。相信大家都好奇如何能够实现strlen函数的功能,下面我将给出个简单的实现方法。返回类型为目标字符串的首地址,参数为目标字符串的首地址,源字符串的地址。返回类型为目标字符串的首地址,参数为目标字符串的首地址和源字符串的首地址。在strcpy的基础上加多了num这个参数,从而能够指定拷贝字符串的长度。在strcat的基础上加上了num这个参数,从而能够指定追加字符串的长度。返回值为所读取字符串的长度,参数为该字符串的首地址。

2025-11-14 21:37:36 176

空空如也

空空如也

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

TA关注的人

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