自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++篇】类与对象(上篇):从面向过程到面向对象的跨越

大家好,我是“我想吃余”,很高兴你能和我一起进入到C++的学习中,我会将我的学习过程中的宝贵经验不遗余力的输入到文章中,希望可以帮助到你的学习。本文涵盖了从面向过程与面向对象的区别,到类的定义、访问限定符、封装、作用域、实例化、对象大小计算,以及this指针等内容。// 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的。

2025-03-29 18:14:14 806 6

原创 【C++篇】C++入门基础(二)

话接上回,本文主要内容是讲解引用、内联函数、auto关键字、及指针空值nullptr的知识。其中引用尤为重要。基本任何场景都可以用引用传参谨慎用引用做返回值,出了函数作用域,如果对象不存在了(如在栈帧中被销毁了),就不能用引用返回,还在就可以使用引用返回auto作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得return 10;auto b = a;return 0;是一个求数据类型的函数。

2025-03-28 18:38:01 1191 5

原创 【C++篇】C++入门基础(一)

C++是在C的基础上发展的语言,其初心本是弥补C的不足,不想却成了一门新的语言。C++兼容C的所有语法。本文主要内容是讲解C++较C所补充的语法内容。声明:本文学习需要C语言的基础,因为C++语法中与C重复的内容不会赘述。定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型。如:int val;命名空间可以嵌套int a;int b;int c;int d;

2025-03-27 14:38:25 922

原创 【初探数据结构】归并排序与计数排序的序曲

本文主要内容是归并的递归和非递归以及计数排序的实现方法。文章会提及很多容易忽视的易错点(大多是我自己踩过的坑😂),这是我在学习这块内容时获取的教训和宝贵经验。因为自己淋过雨,希望能为你们撑把伞!共勉!😁算法时间复杂度空间复杂度稳定性适用场景归并排序O(n log n)O(n)稳定大数据量、需稳定排序计数排序O(n + k)O(k)稳定小范围整数、非比较排序希望这篇文章对你有所帮助🌹🌹🌹。

2025-03-26 21:44:32 1120 4

原创 【初探数据结构】快速排序的四种实现方式(Hoare,挖坑,前后指针,非递归)

快速排序是一种高效的分治排序算法,核心思想是通过选定基准元素将数组划分为两部分,递归排序子数组。Hoare法挖坑法前后指针法及非递归实现,并分析其优缺点。快速排序时间复杂度ON∗logNO(N*logN)ON∗logNHoare法适合教学和理解分治思想。挖坑法在减少交换次数时表现优异。前后指针法代码简洁,适合扩展。非递归实现解决了递归栈溢出的问题,适合工程应用。gitee源码理解每种方法的核心逻辑和细节,才能在实际应用中灵活选择最优方案。

2025-03-25 10:12:11 798 2

原创 【初探数据结构】详解三大经典排序算法(选择/堆/冒泡)

特性选择排序堆排序冒泡排序时间复杂度O(n²)O(n log n)O(n²)空间复杂度O(1)O(1)O(1)稳定性不稳定不稳定稳定适用场景小数据集大数据集教学演示优点简单易实现高效的大数据排序稳定且直观缺点效率低实现较复杂效率最低希望这篇文章对你有帮助~🌹🌹🌹。

2025-03-24 16:15:44 1086 10

原创 【初探数据结构】直接插入排序与希尔排序详解

插入排序:简单但低效,适合小规模数据。希尔排序:通过分组优化插入排序,性能显著提升,是插入排序的高效变种。选择建议:数据规模较小时用插入排序,中等规模用希尔排序,大规模数据可考虑更高效的算法(如快排、归并)后序会一一讲解。

2025-03-24 10:44:51 889 18

原创 【初探数据结构】二叉树的链式结构——分治的暴力美学

BTNode;使用左右指针实现树形结构data字段存储节点值(示例中为char类型)本文实现了二叉树的创建、遍历、统计等核心操作。读者可通过完整代码进一步实验。二叉树作为基础数据结构,其思想可延伸至AVL树、红黑树等高级结构,值得深入学习。希望这篇博客能帮助你更好地理解二叉树操作!

2025-03-22 15:04:44 1417 5

原创 【初探数据结构】堆的应用实例(堆排序与TopK问题)

应用场景核心思路时间复杂度空间复杂度优势堆排序构建堆 + 交换堆顶O(n log n)O(1)原地排序,适合内存敏感TopK问题维护大小为K的最小堆O(n log K)O(K)高效处理海量数据或数据流堆结构凭借其高效的插入删除和极致的空间利用率,在排序与筛选问题中占据独特地位。掌握堆排序与TopK的解法,能显著提升处理大规模数据的能力。理解原理后,可尝试手写堆实现或结合具体业务场景优化代码,进一步巩固知识。

2025-03-22 15:02:52 1029

原创 【初探数据结构】二叉树的顺序结构——堆的实现详解(上下调整算法的时间复杂度分析)

堆是一种基于完全二叉树的数据结构,通常分为最大堆(父节点值≥子节点)和最小堆(父节点值≤子节点)。由于完全二叉树的特性,堆可以用数组高效存储,通过索引关系快速定位父子节点。如果有⼀个关键码的集合,把它的所有元素按完全⼆叉树的顺序存储⽅式存储,在⼀个⼀维数组中,并满⾜:$K=\{ k_0,k_1,k_2,...,k_{n-1} \}$,` i = 0、1、2... `,则称为⼩堆(或⼤堆)。将根结点最⼤的堆叫做最⼤堆或⼤根堆,根结点最⼩的堆叫做最⼩堆或⼩根堆。

2025-03-21 14:26:46 640

原创 【初探数据结构】树与二叉树

树结构相对线性表就⽐较复杂了,要存储表⽰起来就⽐较⿇烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表⽰⽅式如:双亲表⽰法,孩⼦表⽰法、孩⼦双亲表⽰法以及孩⼦兄弟表⽰法等。二叉树是树形结构中我们最常用的,⼀棵⼆叉树是结点的⼀个有限集合,该集合由⼀个根结点加上两棵别称为左⼦树和右⼦树的⼆叉树组成或者为空。⼀个⼆叉树,如果每⼀个层的结点数都达到最⼤值,则这个⼆叉树就是满⼆叉树。完全⼆叉树是效率很⾼的数据结构,完全⼆叉树是由满⼆叉树⽽衍生出来的。要注意的是满⼆叉树是⼀种特殊的完全⼆叉树。

2025-03-20 00:41:05 1110

原创 【初探数据结构】线性表——栈与队列(代码实现与详解)

栈和队列是算法设计的基石,理解其原理和实现是程序员的基本功。建议通过实际编码练习(如实现动态栈、循环队列)加深理解,并多刷相关面试题提升应用能力。

2025-03-11 06:00:00 1014 5

原创 【初探数据结构】带环链表:原理、判断与数学证明

由节点构成的链式结构中存在至少一个节点,其指针域指向链表中已存在的节点,形成闭合环路。环路结构:尾节点不指向NULL而指向历史节点遍历特性:从任意环内节点出发将陷入无限循环。

2025-03-10 06:00:00 1094 6

原创 【初探数据结构】链表OJ算法——快慢指针

如果读者觉得不过瘾,那就再来两题吧~141. 环形链表 - 力扣(LeetCode)19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)本文只讲解了两个简单的题目,目的在于帮助读者打好基础,下一篇文章将要讲解的带环链表也会用到快慢指针,届时读者可以对其有更深层次的认知。

2025-03-07 15:05:57 1421 3

原创 【初探数据结构】线性表——链表(二)带头双向循环链表(详解与实现)

带头双向循环链表,顾名思义,包含以下几个重要特点:每个结构体包含:带头双向循环链表支持常见的增删查改操作,以下是常用操作的实现。在初始化时,创建一个头节点,并将其和指针都指向自身,这样链表初始时是空的,并且形成了一个循环结构。用于执行具体的插入操作,它将新节点插入到链表末尾。3.3 删除节点尾删操作:删除链表尾部的节点。头删操作:删除链表头部的节点。3.4 查找节点通过值查找链表中的节点。3.5 删除指定节点通过指针删除指定位置的节点。4. 带头双向循环链表的优势简化

2025-03-06 12:54:34 1159 24

原创 【初探数据结构】链表OJ算法——哨兵位(合并两个有序链表详解)

如果这道题不用哨兵位,你将会被一个错误搞的焦头烂额——对空指针解引用,不相信的话你可以去试试,你一定会影响深刻的。通过这道题,是不是觉得哨兵位真的很香?非常省事,特别是这种多链表的联合问题,我们一定要留个心眼。

2025-03-05 08:16:24 826

原创 【初探数据结构】线性表————链表(一)(单链表的实现)

链表是一种物理存储结构非连续、非顺序的线性数据结构。与数组不同,链表的元素通过指针链接形成逻辑上的顺序关系。每个节点包含两部分:链表的优势:每个节点都是一个结构体,这个结构体包含2个(单链表)或者3个成员(双链表)。指针域:指向下一个节点的指针:指向上一个节点的指针数据域:存储数据各个节点通过指针相互链接,构成了链表链表一共有8种这三个特性自由组合,就组成了8种链表我们主要研究这两种链表:这两种链表吃透后,剩余的也就自然而然的学会了。头文件编写:SList.h插入节点尾插

2025-03-04 16:59:54 837

原创 【初探数据结构】线性表———顺序表的详解和实现

线性表是n个具有相同特性的数据元素的有限序列,其特点为逻辑上连续,但在物理存储上可分为顺序存储和链式存储。顺序表(本文重点)链表栈队列字符串4// 初始容量// 数据存储数组int size;// 当前元素个数// 当前分配的总容量} SeqList;

2025-02-25 01:04:52 1225 3

原创 【初探数据结构】时间复杂度和空间复杂度

时间复杂度关注算法执行次数的增长趋势,空间复杂度关注额外空间的占用。大O渐近表示法通过简化表达式,聚焦主要矛盾。实际应用中需结合具体场景选择最优算法。

2025-02-24 17:58:22 1344 2

原创 高阶C语言|程序编译与预处理:从源代码到可执行的奥秘

/ 输出当前文件和行号理解编译与预处理机制,能帮助开发者写出高效、可维护的代码。掌握宏的使用技巧、避免常见陷阱,是进阶C语言编程的必经之路。推荐阅读《程序员的自我修养》和《高质量C/C++编程指南》,深入探索底层原理。参考书籍《程序员的自我修养》简明VIM教程。

2025-02-20 09:42:55 801 6

原创 高阶C语言|文件操作——你不知道的文件小秘密

文件操作的世界其实并没有你想象的那么复杂。只要掌握了文件打开、读写、关闭的基本技巧,再加上对fseek和rewind这些“小工具”的灵活运用,你就能轻松自如地管理你的文件了。所以,下次当你面对文件时,不要再紧张了!只要记得好好地与它互动,文件也会变成你忠实的小伙伴,陪你一起完成各种任务,轻松搞定所有挑战。

2025-02-17 14:43:53 1543

原创 C/C++程序的内存是如何开辟的?

在 C/C++ 编程中,内存的分配和管理是非常关键的,因为它直接影响到程序的性能、效率和稳定性。C/C++ 提供了不同的内存分配方式,主要分为栈内存分配和堆内存分配。每种内存分配方式都有其适用的场景和优缺点。以下是对 C/C++ 程序的内存开辟的详细解析。

2025-02-13 18:00:00 1322

原创 高阶C语言|动态内存管理

动态内存管理为 C/C++ 程序提供了极大的灵活性,可以帮助开发者根据程序的需要动态分配和释放内存。然而,动态内存管理的错误使用会导致许多问题,如内存泄漏、悬挂指针、内存越界等。因此,开发者需要小心谨慎,确保每一块动态分配的内存都被正确管理。掌握动态内存管理的技巧将有助于提高程序的性能和可靠性。希望这篇博客能够帮助你理解和掌握 C/C++ 中的动态内存管理。如果你有任何问题,欢迎留言讨论!

2025-02-13 12:41:45 1298

原创 高阶C语言|枚举与联合

在C/C++语言中,枚举(enum) 和 联合(union) 是两种重要的数据类型,它们在不同的应用场景下发挥着独特的作用。枚举适用于定义一组有限的取值,提高代码的可读性和安全性,而联合则用于多个变量共享存储空间,节省内存。在本篇文章中,我们将详细探讨枚举和联合的概念、定义方式、优缺点以及使用示例。

2025-02-10 06:00:00 2262 33

原创 高阶C语言|和结构体与位段的邂逅之旅

本文探索了高阶C语言的核心特性,并深入分析了结构体和位段在C语言中的应用与交互。首先,阐述了结构体作为C语言中数据组织的重要方式,它能够有效地将不同类型的数据组合在一起,适应多样化的程序设计需求。接着,分析了位段作为结构体中的一个高级特性,如何通过控制数据存储空间,实现高效的内存使用和精确的数据表示。通过实例展示了结构体与位段结合使用的场景,重点讨论了如何在不同的硬件平台和操作环境下,利用这些特性优化代码和提高程序的执行效率。最后,探讨了结构体与位段在实际开发中的应用价值,特别是在嵌入式系统和网络协议设计中

2025-02-07 16:04:32 1573 7

原创 高阶C语言|通讯录管理系统(详解+完整代码)

在实际开发中,将不同功能封装到不同的源文件中是很常见的做法,可以有效提高代码的可读性和可维护性。每次添加一个联系人,我们都会提示用户输入联系人姓名、年龄、性别、电话和地址,并将其存储到。在这个文件中,我们将测试所有功能,用户可以选择相应的操作,程序会根据用户输入调用不同的函数。结构体,包含了一个存储联系人信息的数组和当前已经存储的联系人个数。每个联系人信息是一个。首先,我们需要一个初始化函数来清空通讯录,并将联系人数量设置为 0。在这个文件中,我们实现了通讯录的具体功能,包括联系人信息的增删改查、排序等。

2025-02-03 19:16:55 1253 17

原创 高阶C语言|深入理解字符串函数和内存函数

在C语言中,字符和字符串是常用的数据类型。然而,C语言并没有专门的字符串类型,所有字符串都是通过字符数组或字符串常量来表示。为了处理这些字符串,C语言提供了许多强大的库函数。本文将详细介绍这些常用的字符和字符串处理函数,以及它们的使用方法和注意事项。

2025-01-27 20:13:05 2083 2

原创 高阶C语言|数组名的深度解析(数组名结合sizeof与strlen的详解)

在C语言中,数组和指针是两大基础知识点,理解它们的内在联系对于编写高效的代码至关重要。尤其是在面试过程中,数组和指针相关的题目经常出现在笔试和面试中。本文将通过详细的例子和解析,帮助你更好地理解数组名的各种含义。sizeof(数组名):计算整个数组的大小。&数组名:表示整个数组的地址。数组名:在大多数情况下,表示数组首元素的地址,类似指针。strlen:用于计算字符串的长度,但仅适用于字符数组或指向字符串的指针。

2025-01-24 21:09:00 1933 30

原创 高阶C语言|库函数qsort的使用以及用冒泡排序实现qsort的功能详解

在编程中,排序算法算是我们的老盆友了,但是你是否认识qsort的呢?在本文中,我们将深入探讨qsort函数的使用,并通过实现冒泡排序来模拟qsort的功能,比较两者的不同之处。qsort冒泡排序是一种简单的排序算法,它通过重复地遍历待排序的数组,比较每对相邻元素,并交换它们的位置,如果它们的顺序不正确。这个过程会持续进行,直到没有任何元素需要交换为止。虽然qsort和冒泡排序都能实现数组的排序功能,但它们各自的效率和适用场景差异显著。qsort。

2025-01-16 10:48:42 1468 24

原创 高阶C语言|探索指针的根源之目(进阶指针)

C语言的指针被视为一项强大但复杂的工具,它允许程序直接操作内存,提高程序的灵活性和效率。虽然指针的基础用法很多人已经掌握,但更深入的理解能够帮助开发者解决更复杂的编程问题。本文将详细探讨C语言中一些进阶的指针概念,包括字符指针、数组指针、指针数组、函数指针、指向函数指针数组的指针等,并通过示例深入讲解它们的用法和应用场景。

2025-01-13 16:44:27 7153 29

原创 高阶C语言|深度剖析数据在内存中的存储

在计算机程序中,数据类型不仅决定了变量存储数据的方式,还决定了如何高效地处理这些数据。每种数据类型都有其特定的内存分配规则、范围和使用场景。理解数据类型的基本分类是学习内存存储的第一步。通过对数据类型、整数和浮点数在内存中存储方式的深入理解,可以更清楚地看到计算机如何高效地处理不同类型的数据。掌握补码、大端字节序、浮点数表示等基本概念,将有助于我们在编程中避免潜在的错误和性能瓶颈。

2024-12-27 17:09:25 2127 24

原创 初探C语言|C语言中有哪些操作符呢?

本篇文章将深入探讨 C 语言中的各种操作符,包括算术操作符、移位操作符、位操作符等,帮助大家更好地理解和使用这些操作符。

2024-12-26 15:44:25 1880 12

原创 初探C语言|一篇文章让你拿捏指针(初阶指针)

本文将详细介绍C语言中的指针基本概念,通过本文,读者能够更深入地理解指针的工作原理及其应用场景,进而在C语言的编程中游刃有余。指针是一个存储内存地址的变量。它指向某个变量在内存中的位置。int *p;// 未初始化指针*p = 20;// 使用未初始化的指针,结果是未定义行为return 0;二级指针()是指指向另一个指针的指针。简单来说,二级指针存储的是一级指针的地址。通过二级指针,可以间接地访问一级指针指向的内存地址,从而实现多级间接访问。这里,type是指针指向的变量类型,是二级指针的名称。

2024-12-19 12:03:09 2062 12

原创 初探C语言|实现扫雷游戏的底层逻辑

扫雷游戏是一款经典的单人益智游戏,玩家的目标是在一个由许多格子组成的方格中寻找隐藏的地雷。通过标记地雷位置并避免点击地雷,玩家可以逐步揭示无雷区域,最终完成游戏。本文将介绍如何使用C语言实现一个简单的扫雷游戏。

2024-12-17 14:55:51 1403 10

原创 初探C语言|实现井字棋游戏(超详解)

井字棋(Tic-Tac-Toe)是一个经典的两人对战游戏,简单而富有挑战性。你可以轻松地在纸上画出棋盘,开始游戏,但用代码实现它却能带来不一样的乐趣和思考。今天,我们将用 C 语言一步一步实现一个井字棋游戏,并介绍如何优化和改进代码。这个井字棋游戏的实现包含了游戏的基本功能,如玩家输入、电脑随机下棋、判断胜负等。然而,这个游戏的电脑对手策略非常简单,完全依赖于随机选择空位来下棋。

2024-12-09 23:34:28 1900 6

原创 初探C语言|浅谈函数的递归

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的。一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略。只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:把大事化小。

2024-12-06 19:49:20 1021 6

原创 初探C语言|如何在有序数列中查找一个数呢?二分查找的拿手活!

二分查找(Binary Search)是一种经典的查找算法又称折半查找法,主要用于在有序数组中高效地查找目标值。其时间复杂度为Olog⁡nO(\log n)Ologn,因此在大规模数据中非常实用。本文将结合一个 C 语言实现的代码,详细介绍二分查找的原理、代码实现。二分法的思想也常用于其他问题,如查找有序数组中的特定值或优化搜索空间问题。建议大家去深度学习。

2024-12-05 01:01:25 1379 5

原创 初探C语言|手把手带你手撕猜数字游戏

作为一名编程初学者,最令人兴奋的时刻莫过于实现自己的第一个完整项目。今天,我们将一起手撕猜数字游戏,并逐步解析实现过程。这不仅能帮助你巩固 C 语言的基础知识,还能感受到编程的乐趣。

2024-12-02 22:23:07 640 1

空空如也

空空如也

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

TA关注的人

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