- 博客(51)
- 收藏
- 关注
原创 【算法日记】二叉树经典算法:判断相同树和子树,翻转二叉树,平衡二叉树,对称二叉树
本文介绍了二叉树相关问题的解法,包括判断相同的树(LC100)、子树判断(LC572)、翻转二叉树(LC226)、平衡二叉树(LC110)和对称二叉树(LC101)。每道题都给出了题目描述、解题思路和Java代码实现。关键点包括:递归判断树结构和节点值、利用相同树判断实现子树检查、前序遍历实现树翻转、优化高度计算判断平衡性,以及通过翻转子树判断对称性。这些解法展示了二叉树问题的常见处理模式,如递归遍历、结构比较和高度计算等。
2025-10-02 02:06:20
747
原创 【数据结构】二叉树深度解析
本文系统讲解了树型结构和二叉树的核心知识。首先介绍了树的定义、特点及重要概念(如度、层次、深度等),并阐述了树的表示方法和文件系统应用。其次重点解析了二叉树的定义、特性、两种特殊类型(满二叉树和完全二叉树)及其五大核心性质。最后说明了二叉树的两种存储结构(顺序存储和链式存储)并提供了Java代码实现示例。全文通过理论讲解与图示相结合的方式,全面覆盖了树和二叉树的基础知识体系。
2025-09-28 02:16:09
948
原创 【算法日记】栈与队列经典算法:括号匹配,逆波兰表达式,出入栈次序,循环队列
本文介绍了三个经典的栈相关问题及其解法: 括号匹配问题:通过栈结构判断字符串中的括号是否有效匹配,遇到左括号入栈,遇到右括号检查栈顶是否匹配,最终栈为空则有效。 逆波兰表达式求值:利用栈处理运算符和操作数,遇到数字压栈,遇到运算符则弹出栈顶两个元素计算后重新压栈,最后栈中剩余元素即为结果。 出栈顺序合法性:模拟入栈出栈过程,遍历压入序列并匹配弹出序列,最终栈为空则顺序合法。 每个问题都通过栈的先进后出特性高效解决,并附有详细的代码实现示例。
2025-09-24 13:36:26
1103
2
原创 【数据结构】栈Stack与队列Queue深度解析
本文介绍了栈和队列两种线性数据结构及其实现。栈是一种后进先出(LIFO)结构,支持压栈(push)和出栈(pop)操作,Java中可通过Stack类实现。队列是一种先进先出(FIFO)结构,支持入队(offer)和出队(poll)操作,Java中通过Queue接口和LinkedList类实现。文中详细对比了二者的特点、操作方法和底层实现,并提供了基于数组和链表的模拟实现代码,帮助理解其核心原理和应用场景。
2025-09-21 02:20:06
1501
原创 【算法日记】链表经典问题解析:环形、回文与相交
本文介绍了四个经典链表问题的解法:1)判断环形链表使用快慢指针法;2)寻找环形链表入口节点需在快慢指针相遇后重新调整指针;3)判断回文链表需找到中点并反转后半部分比较;4)寻找相交链表需先对齐长度再同步遍历。每个问题都给出了清晰的思路分析和Java代码实现,重点运用了双指针技巧,时间复杂度均为O(n),空间复杂度O(1)。这些解法展示了链表问题的常见处理模式,包括快慢指针、反转链表和长度对齐等核心技巧。
2025-09-19 20:24:31
1069
原创 【数据结构】 深入理解 LinkedList 与链表
本文介绍了链表的基本概念与结构特点,重点分析了无头单向非循环链表和无头双向循环链表两种核心结构。通过模拟Java的LinkedList实现,详细讲解了链表的核心操作:增(头插、尾插、任意位置插入)、删(删除单个节点和所有匹配节点)、查(包含判断和长度统计)。文中特别强调了插入操作的顺序问题,以及删除操作中边界条件的处理。代码实现展示了链表操作的关键逻辑,包括节点引用修改、异常处理等,为理解链表数据结构提供了实践参考。
2025-09-16 13:46:21
640
原创 【算法日记】杨辉三角,轮转数组,洗牌算法
本文介绍了三个算法问题的解决方案:杨辉三角生成、数组旋转和洗牌算法。杨辉三角通过二维数组逐行构建,每个数是上一行相邻两数之和;旋转数组采用三次翻转法,先整体翻转再分段翻转;洗牌算法通过随机交换实现公平洗牌,并演示了扑克牌的分发逻辑。每个问题均附Java代码实现,涵盖数组处理、数学规律和随机算法等核心编程技巧。
2025-09-13 16:05:56
1109
1
原创 【数据结构】Java集合框架:List与ArrayList
Java List接口与顺序表实现 本文介绍了Java集合框架中的List接口及其实现原理。List是继承自Collection的线性表接口,具备有序元素管理能力。文章首先分析了List接口的定义和核心方法,包括继承自Collection的基础方法和List特有的位置操作方法。 重点介绍了顺序表(数组实现)这一线性表的物理存储结构,并详细演示了如何自定义实现顺序表(MyArrayList)。包括: 异常类设计(空表异常和索引非法异常) 核心成员变量和构造方法 工具方法实现(边界校验、动态扩容) 核心功能实现
2025-09-12 20:26:49
1025
原创 【数据结构】初识Java集合框架,算法复杂度与泛型
Java集合框架是java.util包下用于管理数据元素的接口和实现类,包含Collection(单元素)和Map(键值对)两大体系。集合框架能提高开发效率,也是面试重点。算法复杂度评估代码效率,包括时间复杂度和空间复杂度。泛型是集合框架的核心,通过类型参数化实现类型安全,避免运行时错误。泛型类和方法使用类型占位符,编译时进行类型检查,底层通过擦除机制实现。
2025-09-12 00:14:18
1098
原创 【算法日记】String相关算法练习
本文介绍了四个字符串处理问题的解法:1) 查找字符串中第一个唯一字符的索引;2) 计算句子最后一个单词的长度;3) 验证字符串是否为回文;4) 统计字符串中的单词数。每个问题都给出了Java实现代码和解题思路,涉及数组计数、字符串分割、双指针等技巧。此外还分析了一个关于引用传递的程序运行结果,解释了String不可变性和数组修改的特性。
2025-09-08 15:55:06
1053
3
原创 【Java SE】基于多态与接口实现图书管理系统:从设计到编码全解析
本文介绍了一个基于分层设计的图书管理系统架构。系统采用模块化设计,分为Book、User、IOperations等核心包,各司其职。Book包封装图书数据和书架管理,User包通过抽象类和子类实现多态,区分管理员和普通用户的不同权限。管理员可执行查找、新增、删除等操作,普通用户则支持查找、借阅、归还等功能。系统通过接口解耦具体操作,实现灵活扩展。整体设计体现了封装、多态等面向对象原则,保证了系统的可维护性和扩展性。
2025-08-27 21:48:34
1296
1
原创 【Java SE】深入理解异常处理机制
Java异常处理机制摘要 Java异常处理是确保程序健壮性的关键技术。异常分为Error(系统级错误)和Exception(程序可处理异常),后者又分为受检异常(编译时检查)和非受检异常(运行时错误)。Java采用EAFP防御式编程思想,通过throw、try-catch、finally和throws等关键字实现异常处理。throw用于抛出异常,throws声明方法可能抛出的异常,try-catch捕获处理异常,finally确保资源释放。异常处理能使程序逻辑与错误处理分离,提高代码可读性和可维护性。合理使
2025-08-26 22:03:43
509
3
原创 【Java SE】认识String类
摘要: Java中的String类提供了强大且安全的字符串操作功能,解决了C语言字符串处理的不足。String具有不可变性、字符串常量池优化和final类三大特性。创建String对象有三种主要方式:字面量、new构造和字符数组转换。JDK 9后String内部改用byte数组存储以节省空间。字符串比较有四种方法:==比较引用地址、equals比较内容、compareTo按字典序比较、compareToIgnoreCase忽略大小写比较。字符串常量池机制优化了内存使用,相同字面量会共享同一对象。
2025-08-25 23:17:44
1007
1
原创 【Java SE】深入理解接口与Comparable,Comparator,Cloneable
接口是一种完全抽象的编程结构,定义了一组方法签名(无实现)作为"契约",要求实现类必须提供具体实现。Java接口语法使用interface关键字,可包含抽象方法、默认方法、静态方法和私有方法,变量默认为常量。类通过implements实现接口,支持多继承解决Java单继承限制。接口特性包括:不能直接实例化、方法默认public abstract、变量默认public static final、支持默认方法(避免破坏现有实现)和静态方法(直接通过接口调用)。通过USB设备类比,接口实现了&
2025-08-24 17:58:29
1351
2
原创 【Java SE】抽象类与Object类
Java中的抽象类与接口是面向对象编程的核心抽象机制。抽象类用于定义部分实现的模板,可以包含抽象方法和具体实现,但不能直接实例化。它通过abstract关键字声明,子类必须实现所有抽象方法。抽象类适用于有共同特征的类族,提供基础实现。接口则定义纯粹的抽象规范,Java 8后支持默认方法。两者在继承、多实现、访问修饰等方面存在差异,开发者应根据场景选择:抽象类用于"is-a"关系,接口用于"can-do"能力。合理使用这两种机制能提高代码的灵活性和可扩展性。
2025-08-23 21:38:08
1264
3
原创 【Java SE】深入理解继承与多态
本文介绍了面向对象编程中的继承和多态两大核心概念。继承通过extends关键字实现代码复用,子类可以访问父类非私有成员,使用super关键字调用父类构造和方法。初始化顺序遵循父类到子类、静态到实例的规则。多态则通过方法重写实现,同一方法在不同子类中表现出不同行为,需要满足继承、重写和父类引用调用三个条件。文章还对比了继承与组合的差异,并介绍了final关键字限制继承的特性,为Java面向对象编程提供了基础指导。
2025-08-22 23:41:41
1391
原创 【Java SE】认识数组
本文全面介绍了Java数组的核心知识,包括数组的基本概念、创建与初始化方法、元素访问方式以及引用类型特性。重点讲解了数组作为函数参数和返回值的应用场景,并提供了数组转字符串、拷贝、查找、排序和逆序等常用操作的实战代码示例。通过本文,读者可以系统掌握Java数组的使用技巧,理解其在内存中的存储方式,并学会如何高效操作数组解决实际问题。
2025-08-21 21:26:23
710
原创 【Java SE】初识Java:从语言特性到实战入门
本文全面介绍了Java编程语言的核心概念。作为常年位居编程语言榜首的"万能工具包",Java具备跨平台性、安全性、面向对象等特性,广泛应用于企业系统、Android开发、大数据等领域。文章从Java的发展简史、核心特性讲起,详细解析了JDK/JRE/JVM的关系,并通过"Hello World"示例演示了Java程序的编译运行流程。此外,还讲解了注释、标识符和关键字等基础语法规范。作为编程入门指南,本文为读者搭建了Java学习的整体框架,为后续深入学习面向对象等高级特
2025-08-20 17:32:43
1107
1
原创 【C语言】经典贪吃蛇游戏:从设计到代码全解析
本文介绍了使用C语言在Windows控制台中实现贪吃蛇游戏的核心技术。主要内容包括:1)通过Win32 API控制控制台窗口、光标和键盘输入;2)使用宽字符绘制游戏地图和蛇身;3)采用链表结构管理蛇身节点;4)实现蛇移动、吃食物增长、碰撞检测等核心逻辑。游戏设计中重点关注了坐标系统、数据结构、状态管理以及游戏循环的实现,展示了如何将这些技术组合完成一个完整的控制台游戏开发。
2025-08-19 18:03:43
1267
8
原创 【数据结构】深入理解双向链表:结构、实现与对比分析
双向链表是一种重要的线性数据结构,本文详细介绍了其结构特点和实现方法。文章首先将链表分为8种类型,重点分析了无头单向非循环和带头双向循环两种常用链表的特点和应用场景。随后详细讲解了带头双向循环链表的结构设计,特别是哨兵位节点的重要作用,并给出了节点结构的C语言定义和主要操作函数。最后通过对比顺序表和双向链表的优缺点,指出顺序表适合频繁访问元素,而双向链表更适合频繁插入删除的场景。文章全面展示了双向链表的特性和适用情况,为选择合适的数据结构提供了参考。
2025-08-18 23:31:59
1134
2
原创 【算法日记】链表经典算法:移除元素,反转链表,约瑟夫环问题,找中间节点,分割链表
本文介绍了五种链表操作的经典算法题解:1)删除特定值节点,通过哨兵节点统一处理;2)反转链表,使用双指针迭代实现;3)合并有序链表,采用哨兵节点简化拼接;4)寻找中间节点,运用快慢指针法;5)链表分割,创建两个子链表后拼接。每个问题都包含示例说明、解题思路、代码实现及解析,重点展示了哨兵节点和双指针等技巧在链表操作中的灵活应用。
2025-08-17 22:34:15
1142
3
原创 【数据结构】深入理解单链表与通讯录项目实现
单链表是一种物理存储结构非连续、非顺序的线性数据结构,其数据元素的逻辑顺序通过节点间的指针链接来实现。每节车厢(节点)独立存在车厢之间通过连接装置(指针)关联可以灵活地增加或移除车厢(节点)而不影响其他部分// 定义单链表存储的数据类型,此处为int// 节点存储的数据// 指针,用于保存下一个节点的地址}SLTNode;这样的定义使得单链表可以灵活存储不同类型的数据,只需修改的定义即可。// 指针保存下一个节点的地址// 指针保存前一个节点的地址// 存储的数据}LTNode;
2025-08-16 21:29:48
1008
原创 【算法日记】双指针法元素移除与有序合并
双指针技术是处理数组问题的常用技巧,能够在不使用额外空间的情况下高效地完成操作逆向思维在合并有序数组问题中起到了关键作用,从后往前操作避免了元素覆盖的问题原地操作的要求促使我们思考更高效的空间利用方式。
2025-08-15 00:40:36
1234
1
原创 【数据结构】深入理解顺序表与通讯录项目的实现
顺序表作为一种基础且重要的数据结构,通过对数组的封装,提供了更灵活、更易用的接口,非常适合实现如通讯录这类需要动态管理数据的应用。掌握顺序表不仅能帮助我们理解数据结构的核心思想——高效组织和管理数据,也为学习更复杂的数据结构(如链表、树、图等)打下坚实基础。在实际开发中,没有完美的数据结构,只有最适合的选择。理解每种数据结构的优缺点,才能在面对具体问题时做出最优决策。
2025-08-11 22:48:38
1246
5
原创 【C语言】深入理解预处理
C语言预处理是编译前的关键环节,处理以`#`开头的指令。包含预定义符号(如`__FILE__`等,助于调试);`#define`可定义常量与带参宏,宏需注意运算符优先级和副作用参数;宏与函数各有优劣,宏快但难调试,函数可递归;还有`#`(字符串化)、`##`(记号粘合)运算符,`#undef`移除宏定义,命令行定义、条件编译、头文件包含等功能,掌握这些能写出更高效灵活的代码。
2025-08-09 22:45:05
1249
2
原创 【C语言】深入理解编译与链接过程
链接是一个复杂的过程,它需要把多个目标文件和链接库链接在一起,最终生成可执行程序。、链接底层实现中的空间与地址分配等,如果想要深入了解,可以阅读《程序的自我修养》一书。希望通过今天的讲解,能让你对C语言程序的编译和链接过程有更清晰的认识。翻译环境的核心任务是将源代码转换为可执行的机器指令,它由编译和链接两个大的过程组成,而编译又可以进一步分解为预处理(预编译)、编译、汇编三个步骤。在ANSI C的任何一种实现中,都存在两个不同的环境,它们共同支撑着C语言程序的生命周期。这个地址修正的过程就被叫做重定位。
2025-08-07 22:36:26
1034
3
原创 【C语言】文件操作全解析
文件操作是C语言编程中的重要技能,掌握它可以让你的程序具备数据持久化能力。本文介绍了文件的基本概念、类型划分、打开关闭、顺序读写、随机读写、结束判定以及缓冲区机制等内容。始终检查文件是否成功打开操作完成后及时关闭文件正确判断文件读取结束的条件理解并合理利用缓冲区机制。
2025-08-06 21:21:53
1151
1
原创 【C语言】动态内存管理详解
本文聚焦 C 语言动态内存管理,先阐述因静态分配局限需动态分配内存,介绍 `malloc`/`free`、`calloc`、`realloc` 函数用法,剖析常见内存错误(如空指针、越界等),分析经典笔试题,讲解柔性数组特性优势,最后说明程序内存区域划分,助掌握动态内存管理关键知识。
2025-08-05 20:47:53
1168
5
原创 【C语言】自定义类型:联合体与枚举
本文解析C语言中联合体和枚举两种自定义类型。联合体成员共用内存,大小为最大成员大小,能节省内存,可用于存储互斥属性、判断机器字节序。枚举定义有限取值集合,常量有默认或自定义值,比#define更具可读性、安全性和可调试性,适合表示状态等。合理使用可提升代码效率与可读性。
2025-08-04 22:28:37
1228
2
原创 【C语言】自定义类型:结构体
本文详细讲解C语言结构体相关知识。首先介绍结构体基本概念,包括声明、变量创建、初始化及成员访问,还有结构体自引用的正确方式。接着阐述结构体内存对齐规则,通过示例分析计算方法,说明对齐原因及修改默认对齐数的方法。还讲解结构体传参的两种方式,推荐传地址以提高效率。最后介绍结构体实现的位段,包括声明、内存分配、跨平台问题、应用场景及注意事项。
2025-08-03 18:27:17
1258
4
原创 【C语言】内存函数与数据在内存中的存储
函数功能特点适用场景memcpy复制内存不处理重叠内存,效率较高非重叠内存的复制memmove复制内存处理重叠内存,安全性高可能重叠的内存复制memset设置内存值按字节操作,用于初始化或填充内存初始化、批量设置值memcmp比较内存按字节比较,返回差值关系任意类型内存的比较符号位:最高位为符号位,0表示正数,1表示负数。数值位:剩余位表示数值大小。正整数:原码、反码、补码完全相同。int a = 5(32位)负整数原码:直接翻译二进制(符号位为1)。
2025-08-02 21:41:47
1510
2
原创 【C语言】字符函数与字符串函数详解
本文详细介绍C语言中字符与字符串处理的库函数。涵盖字符分类函数转换函数,以及strlen、strcpy、strcat、strcmp等字符串函数,还包括带长度限制的strncpy等及strstr、strtok、strerror等函数。阐述各函数功能、使用方法,提供示例及部分函数的模拟实现,助读者掌握这些基础且重要的函数,提升编程效率。
2025-08-01 20:21:25
1681
3
原创 【C语言】深度剖析指针(三):回调机制、通用排序与数组指针逻辑
本文围绕C语言中的回调函数、qsort函数、sizeof与strlen的区别及数组与指针笔试题展开。介绍了回调函数的定义、应用及优势;详解qsort函数的参数、用法、模拟实现;对比sizeof与strlen的特性;通过多个代码示例解析数组与指针相关笔试题,助读者掌握这些关键知识点。
2025-07-31 22:32:04
953
5
原创 【C语言】深度剖析指针(二):指针与数组,字符,函数的深度关联
本文围绕数组与指针的关联展开,解析了数组名的一般含义与特殊情况,以及如何用指针访问数组。阐述了一维和二维数组传参本质,介绍了冒泡排序实现。还讲解了二级指针、指针数组、字符指针、数组指针、函数指针及函数指针数组的定义、初始化、使用及相关应用,如指针数组模拟二维数组、函数指针数组实现转移表简化多分支逻辑等。
2025-07-30 23:47:21
1719
10
原创 【C语言】深度剖析指针(一):内存、地址与指针操作
本文围绕C语言指针展开,先介绍内存基本概念与编址原理,说明内存单元及地址的作用,还有地址总线的功能。接着讲解指针变量相关知识,包括取地址与解引用操作符、指针类型意义及大小。还涉及const修饰指针、指针运算、野指针成因与规避方法,以及assert断言的使用,最后通过实例说明指针的传址调用等应用,全面阐述了指针的核心知识。
2025-07-29 21:58:13
1366
原创 【C语言】百行代码实现扫雷游戏(附源码)
本文介绍了扫雷游戏的设计与实现。采用双棋盘设计,包括存储地雷位置的地雷棋盘和展示给玩家的显示棋盘,通过扩大数组尺寸处理边界问题。解析了头文件定义、核心功能实现及主流程控制代码。还给出运行示例,并提出自动展开空白区域、标记地雷、多难度选择等优化方向。
2025-07-29 13:39:04
1209
5
原创 【C语言】深入理解C语言中的函数栈帧:从底层揭秘函数调用机制
函数栈帧(简称"栈帧")是指当一个函数被调用时,在栈上为其分配的一块独立内存区域。每个函数调用都会创建一个对应的栈帧,函数执行结束后,栈帧会被销毁(出栈)。存储函数的参数;保存返回地址(函数执行完后回到调用者的位置);存储函数的局部变量;保存调用者的栈基指针(ebp),以便函数返回时恢复调用者的栈帧;提供临时数据的存储空间(如表达式计算的中间结果)。特性GCC(x86)栈初始化用填充未初始化区域(调试模式)不主动填充,内存值为随机残留安全机制。
2025-07-26 13:12:53
1658
8
原创 【Java SE】类与对象的认识
本文介绍了面向对象编程中类与对象的核心概念。首先对比了面向过程与面向对象的不同思维方式,通过洗衣机的例子说明面向对象更关注对象间的协作。然后详细讲解了类的定义格式、成员变量和方法的声明方式,以及类的实例化过程。重点阐述了this引用的作用及其特性,解释其作为成员方法隐藏参数的工作原理。最后介绍了对象的构造方法,包括构造方法的重载、默认初始化规则和使用this调用其他构造方法的注意事项。文章通过代码示例展示了如何定义类、实例化对象以及正确使用this引用,帮助读者理解面向对象编程的基本概念和实现方式。
2025-07-23 22:56:21
1079
6
原创 【WEB 】从零实现一个交互轮播图(附源码)
通过html,css和JavaScript搭建轮播图。详细介绍了各个功能如何实现,适合初学者食用
2025-07-22 22:22:00
2965
21
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人