自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 解码服务器IO模型

服务器IO模型是处理多客户端请求的核心方案,主要分为非阻塞轮询和多任务并发两种模型。UDP服务器采用单一套接字处理所有客户端,而TCP服务器为每个连接创建独立套接字。非阻塞轮询通过fcntl()设置套接字非阻塞属性,避免阻塞并持续轮询检查数据,但会占用较多CPU资源。多任务模型则使用多线程,TCP服务器中主线程监听连接,为每个客户端创建子线程处理通信,通过互斥锁保护共享资源。两种模型各有优劣,需根据具体场景选择,非阻塞模型适合轻量级需求,多线程模型则能更好地支持高并发TCP连接。

2025-11-24 20:46:30 657

原创 解码TCP

TCP是传输层的核心协议,提供面向连接的可靠数据传输。其核心特性包括三次握手建立连接、四次挥手断开连接,以及通过序列号、确认应答、校验和、超时重传等机制保障可靠性。TCP报头包含源/目标端口号、序列号、控制位等关键字段,最小20字节。采用C/S架构,通过socket、connect等系统调用实现通信。TCP确保数据无丢失、无重复、按序到达,并支持流量控制和全双工通信,是互联网数据传输的基础协议。

2025-11-23 17:43:49 943

原创 解码UDP

摘要: UDP协议是传输层核心协议,提供无连接、不可靠的数据传输服务。其特点包括无需建立连接、不保证数据交付与顺序、报首仅8字节轻量高效,适合实时性要求高且容忍丢包的场景。UDP数据报最大长度为65507字节,但建议≤1472字节以避免IP分片。编程接口涉及socket()创建套接字、bind()绑定地址端口、sendto()发送数据,需注意字节序转换及错误处理。UDP适用于DNS、视频流等低延迟应用,但需应用层自行处理可靠性问题。

2025-11-22 20:45:08 830

原创 解码网络编程基础

本文系统讲解了进程间通信(IPC)和网络通信的核心概念。主要内容包括:1) 进程间通信方式如管道、信号等仅适用于同主机,跨主机通信需通过Socket套接字实现;2) IP地址作为主机唯一标识,分为IPv4和IPv6两类,介绍了IP分类、特殊地址及子网掩码的作用;3) 网络通信采用TCP/IP四层模型,包括物理层(传输介质)、数据链路层(帧传输)等核心内容。文中通过代码示例和图表详细说明了Socket创建、IP地址计算等关键实现方法,为理解网络通信原理提供了系统指导。

2025-11-21 22:10:32 1255

原创 解码线程池

摘要: 线程池通过预先创建并复用线程,减少频繁创建/销毁的开销,提升并发效率。其核心机制包括:1)任务队列管理待执行任务(函数+参数);2)线程池结构体统一管理线程生命周期;3)同步机制(互斥锁+条件变量)保证线程安全;4)动态调整线程数量。关键实现要点:线程循环执行任务时需处理同步、虚假唤醒和资源释放问题。线程池将任务执行与线程管理分离,开发者只需关注任务逻辑,无需处理底层线程调度。

2025-11-20 18:39:03 1186

原创 解码线程调度与信号响应

本文介绍了Linux线程调度策略的核心概念与实现方法。主要内容包括:线程作为最小调度单位,采用抢占式调度机制,高优先级线程可抢占低优先级线程;优先级分为静态优先级(0-99,系统任务可抢占)和动态优先级(通过nice值调整);三种调度策略(SCHED_OTHER默认分时调度、SCHED_FIFO实时先到先服务、SCHED_RR实时轮询)的特性与使用场景;以及相关API函数的使用示例,如设置线程属性、调度策略和优先级等。文章通过代码演示了如何创建SCHED_FIFO策略的高优先级线程。

2025-11-19 21:26:23 922

原创 解码死锁的产生与解决

死锁是多线程编程中的常见问题,指多个线程因互相等待对方资源而陷入无限阻塞状态。其产生需同时满足四个必要条件:资源互斥、请求且保持、不可剥夺和循环等待。预防死锁的主要策略包括破坏这些条件,如一次性申请所有资源(破坏请求且保持)、资源抢占(破坏不可剥夺)和资源有序分配(破坏循环等待)。此外,还可通过运行时动态检测和事后处理解决死锁。实际编程中,统一加锁顺序是最常用的预防方法。代码示例展示了因加锁顺序不一致导致的死锁及其修正方案。

2025-11-18 18:20:51 1213

原创 解码线程同步与互斥

线程并发执行时会出现资源争抢问题,需通过同步和互斥机制解决。互斥锁是实现互斥的核心机制,包括初始化、上锁(阻塞/非阻塞/带超时)、解锁和销毁等操作。关键函数如pthread_mutex_init()、pthread_mutex_lock()和pthread_mutex_unlock(),使用时需注意:避免重复加锁造成死锁,确保释放已获取的锁,并通过临界区保护共享资源。示例展示了主线程和子线程如何通过互斥锁安全访问全局变量,以及带超时的锁获取方法,防止线程永久阻塞。

2025-11-17 17:44:08 1095

原创 解码线程编程

本文介绍了线程的基本概念及其在Linux系统中的创建方法。线程作为进程内执行单元,共享进程资源但拥有独立执行流。文章通过触摸屏坐标获取实例,演示了pthread_create()函数的使用:主线程打开设备文件,创建子线程持续读取触摸事件并转换坐标。关键点包括线程函数原型、参数传递注意事项、资源同步机制(全局变量)以及错误处理。代码展示了如何实现硬件坐标到屏幕坐标的转换,并强调线程安全性和边界检查的重要性。最后指出编译时需链接pthread库(-lpthread),为后续线程管理技术奠定基础。

2025-11-16 20:31:34 757

原创 解码IPC-消息队列、共享内存与信号量集

System-V IPC 是 Linux 进程间通信标准,含消息队列、共享内存、信号量集三类持久性资源,通过键值(key)标识,需手动创建 / 删除。共性:依赖 ftok () 生成唯一键值,可通过 ipcs/ipcmk/ipcrm 命令管理,资源常驻内存需手动清理。特性:消息队列按类型传数据,自带阻塞;共享内存效率最高,需信号量互斥;信号量集负责进程同步,靠 P/V 原子操作。适用场景:按类型传数据用消息队列,高效共享数据用共享内存 + 信号量,协调临界资源访问用信号量集。

2025-11-15 18:49:07 1056

原创 解码IPC-管道与信号

摘要: 进程间通信(IPC)是进程间数据交换的重要方式,本文重点解析管道和信号两种基础通信机制。管道分为匿名管道和命名管道:匿名管道通过pipe()创建,适用于亲缘进程通信,数据单向流动且读写端需明确分工;命名管道通过mkfifo()创建文件节点,支持无亲缘关系进程通过文件路径访问,具备多路写入能力。两者均遵循先进先出规则,但命名管道突破了亲缘限制,扩展了应用场景。文章通过代码示例演示了父子进程匿名管道通信及跨进程命名管道的实现方法,并分析了缓冲区大小测试等关键技术细节。

2025-11-14 20:17:12 998

原创 解码程序与进程

本文梳理了程序与进程的核心概念及编译执行过程。程序是静态指令集合,进程是其动态执行实例。程序需经过预处理、编译、汇编、链接四阶段生成ELF格式可执行文件。进程由PCB、代码段和数据段组成,具有五种基本状态并相互转换。Linux通过fork()创建进程,构建进程树结构,由systemd作为根进程管理所有进程。文中详细介绍了GCC编译流程、ELF文件结构、进程特征与状态转换等关键知识,并提供了相关工具命令和系统调用接口。

2025-11-13 19:32:21 905

原创 解码LVGL 布局与多界面编程

LVGL 提供了弹性布局(Flex)和网格布局(Grid)两种灵活的布局方式。Flex 布局支持单向排列(行/列),可通过弹性增长分配剩余空间,提供多种对齐方式和自动换行功能。Grid 布局是二维表格结构,支持定义固定/自适应/比例分配的轨道大小,元素可跨多行多列。两种布局都支持间隙控制,Flex 适配 RTL 布局,Grid 需要手动配置每个子元素的位置。开发者可根据需求选择合适布局,通过样式属性统一管理布局参数。两种布局均需在 lv_conf.h 中启用对应宏后使用。

2025-11-12 18:28:18 834

原创 解码LVGL定时器

LVGL定时器机制提供周期性执行回调函数的功能,基于非抢占式调度,需定期调用lv_timer_handler()触发。核心接口包括创建定时器(可指定周期、回调和用户数据)、就绪/重置定时器、修改参数(回调、周期、用户数据)以及设置执行次数。定时器支持暂停/恢复功能,可获取调度空闲百分比,并提供异步调用机制。使用时需注意控制回调耗时,避免影响其他定时器触发,在操作系统中可结合返回值优化线程调度。

2025-11-11 18:19:05 723

原创 解码LVGL中文字体、输入框、键盘

中文显示方案摘要 LVGL提供两种中文显示方案:1)固定汉字方案:通过在线字体生成器提取特定汉字生成C数组字库,适用于按钮等固定文本场景;2)动态加载方案:集成FreeType库实时解析TTF字体文件,支持任意汉字显示,适用于用户输入等动态文本场景。关键步骤包括字体文件准备、LVGL配置修改(启用FreeType)、项目编译配置(添加头文件路径及库链接)。方案1节省内存但灵活性有限,方案2功能全面但对系统资源要求较高。根据具体应用场景选择合适方案即可实现LVGL中文显示功能。

2025-11-10 10:55:37 1784

原创 解码LVGL图片

LVGL 图像控件支持通过 C 数组或第三方库解析 RGB 像素数据。对于固定图标等少量图像,建议使用 LVGL 图像生成器将图片转为 C 数组,通过 lv_img_set_src() 绑定显示。需配置 LV_USE_IMAGE 宏启用图像控件功能,并合理设置图像参数(如透明通道、色深等)。显示时可进行缩放、旋转等变换操作,通过 lv_image_set_rotation() 和 lv_image_set_scale() 实现。该方案适合嵌入式设备上显示静态资源,但需注意内存占用和性能优化。

2025-11-09 12:30:24 1368

原创 解码LVGL事件

LVGL 事件系统通过"事件绑定-回调函数"机制实现交互逻辑,具有多绑定支持、事件冒泡和状态化触发等核心特性。事件分为输入设备、绘图、子对象管理和自定义四大类,包含PRESSED、CLICKED、FOCUSED等常用事件。提供lv_obj_add_event_cb()、lv_obj_send_event()等关键函数实现事件的绑定、触发和管理。该系统支持灵活的事件处理,如父容器处理子控件事件、区分输入设备类型等,是LVGL实现用户交互的核心机制。

2025-11-03 21:20:17 1066

原创 解码LVGL样式

LVGL样式系统通过部件(Part)和状态(State)实现精细化控件外观控制。核心部件包括主区域、滚动条、指示器等,状态涵盖默认、按下、聚焦等交互场景。系统支持样式复用、级联优先级、过渡动画和主题管理,提供灵活的外观定制能力。常用API如lv_obj_set_style_width()和lv_obj_set_style_bg_color()可直接设置对象属性,无需预定义样式对象。通过组合部件、状态和样式属性,开发者能高效构建美观且交互流畅的界面。

2025-11-02 17:46:15 1334

原创 解码LVGL基础

LVGL9.2 源码采用模块化设计,主要目录结构如下:/lvgl/src包含核心功能模块(core、display、widgets等),实现了对象管理、绘图、控件等功能;/lvgl/demos和/lvgl/examples分别提供综合案例和基础示例;/lvgl/env_support/包含多平台适配代码。全局配置文件lv_conf.h可自定义控件启用、显示参数等。源码编译由顶层CMakeLists.txt控制,支持静态/动态库构建。该框架通过osal/目录实现操作系统抽象,便于移植到不同平台。

2025-11-01 18:39:51 1197

原创 解码LVGL Linux 系统(Ubuntu/WSL + 开发板)移植

Ubuntu/WSL移植LVGL指南 本文详细介绍了在Ubuntu/WSL环境下移植LVGL图形库的完整流程。主要内容包括: 源码获取:下载LVGL核心代码和Linux平台框架 环境配置:安装SDL2、xkb、CMake等依赖库 VSCode配置:设置CMake工具链和生成器 编译运行:使用GCC编译器构建并验证LVGL模拟器 开发板移植:补充说明ARM平台交叉编译方法 文章提供详细的命令步骤和配置截图,涵盖从源码准备到最终运行的完整过程,同时指出常见错误及解决方法,适合嵌入式开发者参考。

2025-10-31 19:47:39 1107 1

原创 解码Shell 脚本编程

文章摘要 Shell脚本是解释型编程语言,依赖解释器执行(如bash)。其基本要素包括:Shebang指定解释器、注释、变量定义(弱类型,无空格赋值)、输入输出(read/echo命令)、通配符(文件匹配)和管道(命令组合)。变量命名需遵循字母数字下划线规则,引用时可用${}避免歧义。管道通过|或xargs实现命令间数据传递,提升脚本灵活性。脚本文件以.sh为后缀,首行需声明解释器路径(如#!/bin/bash)。

2025-10-30 20:32:45 1097

原创 项目构建优化:git

Git是一款分布式版本控制系统,用于高效管理代码和文档的修改历史,支持多人协作开发。它采用快照式版本管理,通过SHA-1哈希值标识版本,具有速度快、分支功能强大等优势。Git本地操作通过工作区、暂存区和本地仓库三大核心区域完成,基本流程为:修改→暂存→提交。安装Git后需配置用户名和邮箱,并通过git init初始化仓库。常用命令包括git add暂存修改、git commit提交版本、git status查看状态等。Git支持跨平台使用,是当前最流行的版本控制工具。

2025-10-29 18:55:00 1454

原创 项目构建优化:CMake

CMake是一款跨平台的开源构建工具,通过编写简单的CMakeLists.txt配置文件,可自动生成Makefile或工程文件,简化多文件、跨平台项目的编译管理。文章介绍了CMake的安装方法(以Ubuntu为例)和基础使用流程,包括单文件编译、源码隔离构建等实践。重点讲解了多文件项目的编译配置,以及如何自动收集源文件和指定头文件路径等进阶用法。CMake通过抽象构建过程,解决了手动编写Makefile的复杂性,成为现代C/C++项目的主流构建工具。

2025-10-28 19:20:19 1072

原创 项目构建优化:Make 与 Makefile

本文介绍了Make工具与Makefile在项目构建优化中的核心作用。首先分析了大型C/C++项目面临的依赖管理复杂和构建效率低下两大痛点,指出Make工具通过自动化依赖管理和增量编译解决这些问题。文章详细讲解了Makefile的基本规则,包括目标、依赖、命令的语法要求,以及C语言编译四步骤的实现方式。针对多文件工程,展示了如何通过自定义变量简化Makefile编写,提高维护性。Make作为1977年诞生的经典构建工具,至今仍在Linux内核等大型项目中发挥关键作用。

2025-10-27 21:31:02 1215

原创 解码Linux文件IO之中文字库原理与应用

本文介绍了嵌入式系统中汉字显示的核心技术,重点解析了GB2312字符集的编码原理和实现方法。主要内容包括:1)GB2312字符集的分区规则,将7445个字符按区位划分;2)汉字双字节编码机制,通过区码和位码定位字符;3)点阵字库的生成与使用,包括16×16、24×24等常见分辨率;4)TrueType矢量字库的特点及移植方法。文章还提供了GB2312编码验证代码和字库位置计算公式,帮助开发者在嵌入式设备中实现中文显示功能。

2025-10-26 15:00:41 1244

原创 解码Linux文件IO之开机动画原理与实现

开机动画原理与实现 摘要:本文介绍了开机动画的核心原理及实现方法。开机动画利用人眼视觉暂留效应(0.1-0.4秒),通过连续播放静态图像(帧)产生动态效果。关键参数是帧率(FPS),24FPS为最低流畅要求,开机动画常用50FPS(每帧20ms)。实现步骤包括:1)使用工具将GIF/视频拆分为JPEG帧序列;2)编写程序通过LCD显存映射和JPEG解码显示动画帧;3)控制帧间隔保证流畅播放。开发时需注意帧顺序、分辨率匹配和存储空间限制,确保动画在嵌入式设备上稳定运行。

2025-10-25 17:37:41 1218

原创 解码Linux文件IO之JPEG图像原理与应用

摘要 JPEG是一种广泛应用于图像压缩的标准和文件格式,具有高压缩比优势,特别适合照片类图像存储和传输。其核心编解码库libjpeg采用C语言实现,跨平台且开源,是许多图像处理工具的底层依赖。在Linux环境下移植libjpeg需经过下载源码、解压、配置编译参数、编译和安装五个步骤,生成动态库和静态库文件。JPEG解码是将压缩数据转换为RGB像素的关键过程,通过创建解码对象、绑定文件、读取文件头等8个步骤实现,最终输出可用于LCD显示的RGB数据。解码过程需注意错误处理和资源释放,确保程序稳定性。

2025-10-24 21:35:05 1303

原创 解码Linux文件IO之库的制作与应用

程序从源代码到可执行文件需经历预处理、编译、汇编和链接四个阶段,最终生成ELF格式的可执行文件。预处理展开宏定义和头文件,编译将C代码转为汇编代码,汇编生成机器码目标文件(.o),链接合并多个目标文件和库文件并重定位地址。ELF文件包含.text(代码)、.data(已初始化数据)、.bss(未初始化数据)等关键段。 静态库(.a)是多个.o文件的归档集合,通过ar命令制作。程序链接静态库时会将库代码完整复制到可执行文件中,使程序不依赖外部库。静态库使用需提供头文件声明接口,链接时需指定库路径和名称。

2025-10-23 21:13:39 1123

原创 解码Linux文件IO之触摸屏原理及应用

Linux触摸屏输入子系统解析 本文详细介绍了Linux输入子系统对触摸屏的管理机制。系统采用三层架构:设备驱动层直接操作硬件并转换原始数据;核心层提供标准化接口实现上下层解耦;事件层通过/dev/input/eventX设备文件向应用提供统一访问接口。关键结构体input_event封装了所有输入事件,触摸屏操作通过EV_ABS(坐标)、EV_KEY(按压)和EV_SYN(同步)事件组合实现。文章还提供了设备文件识别方法和触摸屏检测代码示例,完整呈现了从硬件操作到应用层事件的转换流程。

2025-10-21 17:33:29 1362

原创 解码Linux文件IO之BMP 图像原理与应用

BMP(位图)是微软开发的图像文件格式,采用无压缩存储方式,文件较大但解析简单,适合本地开发。其结构由文件头(14字节)、信息头(40字节)、可选调色板和像素数据组成,总头部长54字节。关键特性包括:支持多种色深(1/4/8/24/32bit),24bit最常见;像素数据采用BGR顺序;行数据需4字节对齐;默认从下到上存储图像。BMP与JPEG、PNG等格式相比,优势在于无压缩、解码简单,但文件体积较大,适用于LCD显示等本地场景。开发时需注意小端存储、行对齐和像素格式转换等技术细节。

2025-10-20 21:28:37 1301

原创 解码Linux文件IO之LCD屏原理及应用

LCD 基本原理与驱动架构 LCD(液晶显示器)通过液晶分子的电光效应控制光线透射实现显示,其核心结构包括TFT基板、彩色滤光片和偏光片。全彩显示通过RGB三原色混合完成。关键参数包括像素(最小显示单元)、分辨率(像素总数)和色深(颜色数量)。在Linux系统中,LCD由Framebuffer驱动管理,通过设备文件/dev/fb0访问。驱动使用三个核心结构体(固定参数、可变参数、颜色位域)描述硬件特性,并通过ioctl系统调用实现参数配置。应用程序通过读写映射的内存空间即可控制屏幕显示,无需直接操作硬件。

2025-10-19 16:06:24 1490

原创 ARM开发板基础与文件传输

本文介绍了GEC6818 ARM开发板的使用方法,包括硬件连接、系统启动、文件传输和存储扩容。开发板搭载Cortex-A53处理器,支持Linux/Android系统。通过串口连接SecureCRT可进行调试,文件传输支持串口、TFTP网络和U盘三种方式。针对存储空间不足的问题,详细说明了如何挂载未使用的6G分区并设置开机自启。此外,由于ARM架构无法本地编译程序,需在电脑上使用交叉编译器进行交叉编译。

2025-10-17 21:11:48 1153

原创 解码Linux文件IO目录检索与文件属性

目录检索与文件系统基础摘要 Linux系统中目录是特殊文件,存储文件名与inode编号的映射关系而非文件内容。所有文件以根目录/为顶点构成树状结构。磁盘分为inode区(存储文件属性)和数据区(存储文件内容)。核心目录操作包括:mkdir创建目录、rmdir删除空目录、opendir打开目录流、readdir读取目录项(包含文件名和inode号)、closedir关闭目录流、chdir切换工作目录。理解目录索引机制和inode结构是高效访问文件系统的关键。

2025-10-16 21:00:07 1487

原创 解码Linux文件IO之标准IO

标准IO基础:C语言标准库提供遵循POSIX标准的IO函数(如fopen、fread),通过FILE结构体管理文件,包含文件描述符、缓冲区指针等。程序启动时自动打开3个标准流(stdin/stdout/stderr)。主要函数包括:fopen打开文件(支持文本/二进制模式),fgets安全读取行,fread高效读取块数据,fputc写入字符等。二进制模式直接处理原始字节,文本模式会转换换行符(Windows)。注意缓冲区管理和错误检查,避免安全问题(如避免使用已废弃的gets)。

2025-10-14 19:38:13 1219

原创 解码Linux文件IO之系统IO

摘要: Linux系统IO与标准IO对比:系统IO直接调用内核接口,无缓冲区,适用于实时操作;标准IO通过缓冲区减少系统调用,效率更高但仅支持普通文件。文件描述符(fd)是进程访问文件的唯一标识,本质是数组下标。核心系统IO函数包括open(打开/创建文件)、close(关闭文件)和read(读取数据)。open需指定访问模式和可选标志;close释放资源,多次关闭同一fd会失败;read可能返回少于请求的字节数。进程默认打开0-2三个fd(标准输入/输出/错误)。

2025-10-13 21:19:34 1116

原创 解码Linux基础命令

Linux基础命令摘要 本文介绍了Linux命令的基本结构、用户权限(root与普通用户)及帮助查询方法(--help与man)。关键内容包括: 命令格式:命令 [选项] [参数],选项分短格式(-开头)与长格式(--开头); 用户权限:root用户(#提示符)拥有系统最高权限,普通用户($提示符)权限受限; 帮助查询:命令 --help显示快速帮助,man 命令提供详细手册; 常用命令:ls查看目录,sudo临时提权,su切换用户身份。 注意:慎用sudo与su,避免误操作导致系统损坏。

2025-10-09 19:31:01 807

原创 解码Linux环境搭建

Linux 基础环境搭建指南 本文详细介绍了Linux系统在嵌入式开发中的核心地位,对比了Linux与Windows在嵌入式应用中的优劣。重点推荐Ubuntu 22.04 LTS作为开发环境,并提供了完整的虚拟机安装教程(包括VMware配置、Ubuntu安装步骤等)。最后还介绍了如何修改软件源以提升下载速度。文章内容实用性强,图文并茂,适合嵌入式开发初学者快速搭建Linux开发环境。关键点包括:Linux在嵌入式领域的优势、Ubuntu版本选择、虚拟机配置技巧以及国内源设置方法。

2025-10-08 20:01:58 1213

原创 解码查找算法与哈希表

查找算法是计算机科学中用于在数据集中定位目标值的关键技术。常见查找方法包括线性查找、二分查找和哈希查找。线性查找简单通用但效率低(O(n)),适用于无序数据;二分查找高效(O(logn))但要求数据有序,适合静态数据集;哈希查找速度最快(接近O(1))但实现复杂,需要处理冲突问题,适用于大规模数据和高频查询场景。不同算法各有优劣,实际应用中需根据数据特征和操作频率进行选择。

2025-10-07 20:39:06 1307

原创 解码排序算法

本文系统介绍了排序算法的基础概念与分类。排序是将无序序列按特定字段调整为有序序列的操作,其稳定性指关键字相同记录的相对位置是否改变。主要算法包括:1)插入类(如直接插入排序,稳定,适合基本有序小规模数据,时间复杂度O(n²));2)交换类(如冒泡排序O(n²)和快速排序O(nlogn),后者效率高但不稳定);3)选择类(如选择排序)。通过代码示例和步骤图解,文章对比了各类算法的核心思想、时间复杂度和适用场景,为不同数据特征提供了排序方案选择依据。

2025-10-05 19:27:27 888

原创 解码Huffman 编码与 Huffman 树

本文介绍了Huffman编码的原理与实现方法。Huffman编码通过赋予高频字符更短的编码、低频字符更长的编码,有效减少数据存储和传输的空间浪费。其核心是构建Huffman树,该树通过合并权值最小的节点,确保带权路径长度(WPL)最小,从而实现最优编码。文章详细阐述了Huffman树的构建步骤,包括节点合并、路径编码生成等关键过程,并提供了代码实现的思路。Huffman编码具有前缀特性,能保证解码无歧义,是一种高效的无损压缩算法。

2025-10-04 20:17:45 1533

drawtree.h画树的头文件

drawtree.h画树的头文件

2025-09-29

空空如也

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

TA关注的人

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