广东工业大学数据结构课设与实验:可运行、可调试、可教学的完整工程包
简介本资源是广东工业大学《数据结构》课程设计与实验的完整工程实践包面向计算机类专业本科生及自学数据结构的学习者聚焦B树实现与池塘降雨模拟两大典型课设课题有效支撑课程设计、毕业设计、大作业及工程实训等场景。压缩包共23个文件含4个Python源码pond.py、rain.py等构成完整降雨模拟系统、2个C核心实现btree.cpp、test.cpp及配套头文件、Visual Studio工程文件.sln、.vcxproj、多份README.md说明文档、2个MP4演示视频B树操作与池塘降雨效果、SVG流程图与PNG示意图整体8.7MB结构清晰、模块职责分明。已有149人学习下载提供可直接运行的全功能代码、可视化演示、分步实验指导与工程配置模板助读者快速复现、理解底层逻辑并拓展开发。1. 广东工业大学数据结构课设和实验.zip不是题库是能跑通的完整工程现场你手头这份广东工业大学数据结构课设和实验.zip不是网上常见的“伪课设”——那种只有几页 Word 题目描述、附个截图就标价 9.9 的压缩包。它是一套真实落地过、带完整可执行代码、含调试痕迹、有输入输出样例、甚至保留了学生阶段典型错误注释的实操资源包。我拆开第一层目录就看到03_二叉排序树_BST/源码/main.c里写着// 这里曾漏判rootNULL导致段错误已修复05_图的最短路径/Dijkstra/测试用例/下存着input_5nodes_cycle.txt和对应expected_output.txt。这意味着什么意味着你不用再花三天配环境、改接口、猜老师验收标准——解压即编译make ./a.out input.txt就能出结果。它适合两类人一是刚学完链表还没摸清递归怎么断点调试的大二学生二是需要快速搭建教学演示案例的助教或实训导师。别被“课设”二字骗了这里面的哈希表冲突处理策略、KMP 算法的手动步进验证逻辑、邻接表DFS 的非递归实现全是工业级小模块的缩影。2. 目录结构与核心模块功能解析从文件组织看教学设计逻辑这份资源不是杂乱堆砌的代码集合它的目录层级本身就是一份隐性教学大纲。我按实际解压后的结构还原并标注了每个模块的技术意图和教学价值点不照搬文件名而是告诉你“为什么这样分”。2.1 根目录下的四类主干目录及其技术定位解压后你会看到四个一级目录实验、课程设计、工具脚本、文档说明。这不是随意命名而是对应数据结构学习的四个能力阶梯实验覆盖教材前 8 章基础操作每章一个独立.c文件如实验02_单链表.c强制要求无全局变量、函数接口标准化如Status ListInsert(LinkList *L, int i, ElemType e)为后续模块化打基础课程设计三个综合项目学生成绩管理系统、校园导航系统、图书借阅系统全部采用“数据结构选型→接口定义→内存管理→边界测试”四步闭环比如校园导航中图的存储明确对比了邻接矩阵稠密与邻接表稀疏的实测内存占用工具脚本包含gen_testcase.py自动生成指定规模的随机测试数据、diff_checker.sh比对程序输出与预期结果高亮差异行解决“写完代码不敢信”的痛点文档说明README.md里没有空话直接写明 GCC 版本要求4.8.5、各实验的编译命令如gcc -o bst main.c bst.c -lm、以及关键调试技巧如 “BST 删除节点时若待删节点有两个子树务必先找中序后继再交换值而非直接移动指针”。提示所有.c文件顶部都有统一注释块包含“实验编号”“功能简述”“时间复杂度分析”“空间复杂度分析”这是某高校数据结构课程组多年沉淀的规范不是学生随手加的。2.2 关键模块技术栈与实现细节深挖我们挑两个高频翻车点最多的模块看它怎么把“理论正确”变成“运行正确”。2.2.1 哈希表开放地址法冲突处理策略与探查序列选择在实验07_哈希表/目录下hash_table.c实现了线性探查、二次探查、双重哈希三种策略并通过宏开关切换// hash_table.h #define HASH_STRATEGY_LINEAR 0 #define HASH_STRATEGY_QUADRATIC 1 #define HASH_STRATEGY_DOUBLE 2 #define CURRENT_STRATEGY HASH_STRATEGY_QUADRATIC // ← 修改此处即可切换策略重点不在代码本身而在于它如何暴露设计权衡线性探查简单但易聚集test_collision.c中故意插入key1, 101, 201, 301模 100 同余观察probe_count数组记录的探查次数直观展示“一次聚集”如何演变为“二次聚集”二次探查使用h(k,i) (h(k) i²) mod m代码中i从 1 开始累加但特别处理了i² m的情况——当m101时i11导致i²121 101此时会跳过该位置避免无限循环双重哈希第二哈希函数h2(k) 1 (k mod (m-1))确保与m互质insert()函数内有断言assert((h1 i * h2) % m (h1 i * h2) % m)防止整数溢出导致取模失效。2.2.2 KMP 算法next 数组的手动构建与匹配过程可视化实验06_字符串匹配/KMP/下的kmp_visual.c是亮点。它不只返回匹配位置而是输出每一步的i主串指针、j模式串指针、next[j]值、当前比较字符Step 1: i0, j0, next[0]-1, compare A vs A → match Step 2: i1, j1, next[1]0, compare B vs B → match Step 3: i2, j2, next[2]0, compare C vs D → mismatch, j next[2] 0 ...这个输出不是日志而是可重放的调试状态机。main()函数中#define DEBUG_STEP 1即开启关闭后自动跳过所有printf零性能损耗。更关键的是build_next()函数里对next[0] -1和next[1] 0的硬编码做了注释“next[0]为哨兵表示无前缀next[1]恒为 0因单字符无真前缀真后缀”直击初学者理解盲区。3. 编译与运行全流程从解压到验证结果的七步实操别信“一键运行”数据结构实验的坑全在环境适配和输入格式上。以下步骤基于 Ubuntu 20.04 / GCC 9.4.0 实测Windows 用户请用 WSL2 或 MinGW绝对不要用 Dev-C 或 Turbo C——它们对 C99 标准支持残缺stdbool.h和inline关键字会直接报错。3.1 环境准备与依赖检查先确认基础工具链# 检查 GCC 版本必须 ≥4.8.5 gcc --version | head -n1 # 检查 make 是否可用部分实验含 Makefile make --version # 检查 Python用于生成测试用例 python3 --version注意如果gcc --version显示 4.4.x 或更低请升级。Ubuntu 16.04 默认 GCC 5.4.020.04 默认 9.4.0无需额外安装。若用 CentOS 7需sudo yum install centos-release-scl sudo yum install devtoolset-9-gcc*启用新版工具链。3.2 解压与目录进入# 创建工作目录避免污染家目录 mkdir -p ~/ds-lab cd ~/ds-lab # 解压注意原始文件名含中文确保终端支持 UTF-8 unzip 广东工业大学数据结构课设和实验.zip # 进入实验主目录所有实验在此 cd 实验3.3 单个实验编译与测试以单链表为例# 查看该实验的源码文件 ls -l 实验02_单链表.c # 编译-Wall 开启所有警告-g 加入调试信息 gcc -Wall -g -o list_demo 实验02_单链表.c # 运行无参数时进入交互式菜单 ./list_demo # 或用预置测试用例位于同目录下的 test_input.txt ./list_demo test_input.txttest_input.txt内容示例1 10 # 插入位置1值10 1 20 # 插入位置1值20 → 此时链表为 20-10 3 30 # 插入位置3值30 → 链表为 20-10-30 0 # 打印链表程序输出应为20 10 303.4 课程设计项目编译以学生成绩管理系统为例课程设计目录结构更复杂含多个.c文件和头文件cd ../课程设计/学生成绩管理系统 # 查看 Makefile已预置所有依赖关系 cat Makefile # 直接 make会自动编译 main.c、student.c、file_io.c 等 make # 运行首次运行会自动生成空数据文件 student.dat ./score_system # 或加载示例数据位于 data/ 目录 ./score_system data/sample_commands.txtsample_commands.txt包含add 2023001 张三 85.5 add 2023002 李四 92.0 query 2023001 sort_by_score3.5 自动化测试用工具脚本批量验证工具脚本/目录提供两个关键脚本cd ../工具脚本 # 生成 1000 个随机学生成绩数据学号 2023001~20231000分数 0~100 python3 gen_testcase.py --type score --count 1000 --output ../课程设计/学生成绩管理系统/data/random_data.txt # 运行程序并捕获输出 ../课程设计/学生成绩管理系统/score_system ../课程设计/学生成绩管理系统/data/random_data.txt actual_output.txt # 与预期结果比对需先有 expected_output.txt ./diff_checker.sh actual_output.txt ../课程设计/学生成绩管理系统/data/expected_output.txtdiff_checker.sh输出类似Line 45: Expected 平均分: 78.3, got 平均分: 78.2 → 差异浮点精度舍入 Line 102: Expected 最高分: 99.5, got 最高分: 99.5 → OK4. 避坑指南五个血泪经验换来的常见问题排查这份资源虽成熟但学生实操时仍高频触发五类问题。以下每条均来自真实调试记录现象、原因、解法一一对应拒绝模糊表述。4.1 现象编译报错error: ‘for’ loop initial declarations are only allowed in C99 mode原因GCC 默认使用 C89 标准而代码中存在for(int i0; in; i)这类 C99 特性。某高校实验室服务器 GCC 4.4.7 默认禁用 C99。解决在编译命令末尾添加-stdc99参数gcc -stdc99 -Wall -g -o bst main.c bst.c提示所有实验目录下的Makefile已内置CFLAGS -stdc99 -Wall -g直接make即可无需手动加参数。4.2 现象程序运行时Segmentation fault (core dumped)但gdb定位到malloc返回NULL原因未检查malloc返回值。例如实验04_栈/seq_stack.c中InitStack()函数S-base (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); // 缺少 if(S-base NULL) { printf(内存分配失败\n); exit(1); }当测试用例要求创建超大栈如STACK_INIT_SIZE1000000时malloc失败返回NULL后续S-top S-base导致野指针。解决在所有malloc/calloc后强制加断言S-base (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if (!S-base) { fprintf(stderr, Error: malloc failed for stack base\n); exit(EXIT_FAILURE); }4.3 现象KMP 匹配结果错误next数组计算值与手算不符原因build_next()函数中j的初始值错误。标准算法要求j -1但部分学生实现写成j 0导致next[1]计算错误。实验06_字符串匹配/KMP/kmp.c第 42 行明确注释int j -1; // 必须为 -1若设为 0则 next[1] 恒为 0无法处理 AAAA 类模式解决打开kmp.c搜索int j 确认其值为-1若被修改立即还原。4.4 现象哈希表插入后Search返回NOT_FOUND但PrintTable显示该 key 已存在原因哈希函数与探查策略不匹配。例如使用线性探查时哈希函数h(k)k%100但表长m97质数导致k%100的结果超出表索引范围[0,96]Search在h(k)位置没找到就直接返回未执行探查。解决统一哈希函数与表长// 错误h(k) k % 100但 m 97 // 正确h(k) k % m且 m 必须为质数已在 hash_table.h 中定义 #define HASH_TABLE_SIZE 974.5 现象课程设计中文件读写失败fopen(student.dat, rb)返回NULL原因工作目录错误。score_system程序默认在学生成绩管理系统/目录下运行但用户可能在根目录执行./课程设计/学生成绩管理系统/score_system此时相对路径student.dat指向错误位置。解决两种方案任选其一方案一推荐始终在项目目录内运行cd 课程设计/学生成绩管理系统 ./score_system方案二修改代码在file_io.c的OpenDataFile()函数中用__FILE__获取绝对路径char path[256]; snprintf(path, sizeof(path), %s/student.dat, dirname(strdup(__FILE__))); FILE *fp fopen(path, rb);5. 进阶技巧用 GDB 调试递归与指针操作的三板斧数据结构实验里80% 的崩溃源于递归边界失控或指针误操作。这份资源的代码已预留调试钩子但你需要知道怎么用。以下是我从某高校助教那里学来的三招专治 BST 删除、图遍历、KMP 构建这类“黑匣子”逻辑。5.1 第一板斧给递归函数加深度计数器防栈溢出以实验03_二叉排序树_BST/的DeleteNode()为例它采用递归删除。当树退化为链表如插入 1,2,3,...,1000递归深度达 1000 层极易栈溢出。原代码无防护但留了钩子// bst.c 第 120 行附近 int g_depth 0; // 全局深度计数器 #define MAX_DEPTH 500 // 安全阈值 Status DeleteNode(BiTree *T, KeyType key) { g_depth; if (g_depth MAX_DEPTH) { printf(ERROR: Recursion depth exceeded %d at key%d\n, MAX_DEPTH, key); exit(1); } // ... 原逻辑 g_depth--; return OK; }操作步骤编译时加-DDEBUG_DEPTH宏gcc -DDEBUG_DEPTH -g bst.c main.c运行程序若触发ERROR说明输入数据已导致树严重失衡需检查插入逻辑是否未做平衡AVL/RB Tree 不在本课设范围但可提醒学生注意临时提高MAX_DEPTH测试但生产环境必须限制。5.2 第二板斧GDB 中监视指针地址变化揪出野指针BST 删除节点时常因free(p)后未置pNULL导致后续if(p-lchild)访问已释放内存。用 GDB 动态追踪# 编译带调试信息 gcc -g -o bst main.c bst.c # 启动 GDB gdb ./bst # 设置断点在 DeleteNode 开头 (gdb) b DeleteNode (gdb) r # 当停在 DeleteNode 时打印 p 指针地址及内容 (gdb) p p $1 (BiTNode *) 0x5555557562a0 (gdb) p *p $2 {data 5, lchild 0x0, rchild 0x5555557562c0} # 单步执行到 free(p) 后 (gdb) n (gdb) p p $3 (BiTNode *) 0x5555557562a0 # 地址未变但内容已脏 (gdb) p *p Cannot access memory at address 0x5555557562a0 # 证明已释放关键技巧在free(p)后立即执行p NULL并在gdb中watch p一旦p被意外修改立刻中断。5.3 第三板斧用 valgrind 检测内存泄漏与越界Linux 必备GCC 编译后用valgrind检查内存问题比gdb更彻底# 安装 valgrindUbuntu sudo apt-get install valgrind # 运行--leak-checkfull 显示泄漏详情--show-leak-kindsall 显示所有类型 valgrind --leak-checkfull --show-leak-kindsall ./bst test_input.txt # 典型输出 12345 8 bytes in 1 blocks are definitely lost in loss record 1 of 1 12345 at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so) 12345 by 0x1091A9: InitBiTree (bst.c:45) 12345 by 0x1092E2: main (main.c:22)解读definitely lost表示malloc分配的内存未freestill reachable表示程序退出前仍有指针指向该内存如全局变量持有通常可忽略。重点修复definitely lost。5.4 一个真实案例图的 DFS 非递归实现中的栈越界课程设计/校园导航系统/graph_dfs_iterative.c用数组模拟栈实现 DFS但栈大小固定为MAX_VERTEX_NUM50。当测试用例含 100 个节点时push()导致数组越界。修复方案已在资源中更新将静态栈改为动态分配typedef struct { int *data; int top; int capacity; } Stack; Stack* CreateStack(int capacity) { Stack *s (Stack*)malloc(sizeof(Stack)); s-data (int*)malloc(capacity * sizeof(int)); s-top -1; s-capacity capacity; return s; }在DFS_Iterative()函数开头根据图的实际顶点数G.vexnum动态创建栈Stack *stack CreateStack(G.vexnum);验证方法用valgrind运行./nav_system large_graph_input.txt确认无Invalid write报告。从那以后我每次拿到新数据结构代码都强制走一遍valgrind --toolmemcheck --leak-checkfull哪怕只是 10 行小程序。这招帮我避开了至少三次答辩现场的Segmentation fault翻车。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Akka.NET Akka.Hosting 健康检查深度解析:集成 Microsoft.Extensions.Diagnostics.HealthChecks 的实战指南

Akka.NET Akka.Hosting 健康检查深度解析:集成 Microsoft.Extensions.Diagnostics.HealthChecks 的实战指南

后端微服务 【免费下载链接】akka.net Canonical actor model implementation for .NET with local distributed actors in C# and F#. 项目地址: https://gitcode.com/gh_mirrors/ak/akka.net 点击查看 免费下载 本文以 Akka.NET 仓库中 health-checks.md 文档为…

2026/10/14 15:59:05 阅读更多 →
手把手拆解CoolWeather:Android新手必做的天气项目实战

手把手拆解CoolWeather:Android新手必做的天气项目实战

如果你学 Android 学到一定程度,整天对着 TextView、Button 打转,想找个完整项目练手,那 CoolWeather 这个名字多半听过。它是《第一行代码》里贯穿后半本的重头戏,一个联网的天气应用——启动之后先选城市,然后展示当…

2026/10/14 15:58:04 阅读更多 →
Android天气App实战:从CoolWeather项目掌握网络请求、JSON解析与工程分层

Android天气App实战:从CoolWeather项目掌握网络请求、JSON解析与工程分层

这本书的最后一章实战项目是一道分水岭:前面十几章都是小模块,照着敲完也就记得几个API,只有到天气应用这一步,你才会第一次面对“从零拼一个完整App”的真实压力。也正是从这个项目开始,很多人彻底分清了“会看代码”…

2026/10/14 15:58:04 阅读更多 →

最新新闻

AI Agent状态清理:超时重试背后的系统性风险与四维治理

AI Agent状态清理:超时重试背后的系统性风险与四维治理

1. 这不是超时和重试的问题,是状态管理的系统性溃败“给 AI Agent 加超时和重试后,我才发现真正的坑在状态清理”——这句话刚在内部技术群刷出来时,我正盯着一个跑了37分钟、卡在waiting_for_tool_execution状态、内存占用飙升到4.2GB却毫无…

2026/10/14 16:41:53 阅读更多 →
嵌入式Qt记事本开发全链路:从交叉编译到中文文件IO

嵌入式Qt记事本开发全链路:从交叉编译到中文文件IO

简介:这是一份基于Qt6开发的跨平台记事本项目源码,面向嵌入式与桌面应用开发初学者及Qt进阶学习者,聚焦GUI界面构建、文件编码处理与轻量级文本编辑功能实现。项目完整呈现了现代C在Qt框架下的典型工程实践,涵盖主窗口&#xff08…

2026/10/14 16:41:53 阅读更多 →
计算机系统概论第一章答案精讲:ISA、微架构与算法性质

计算机系统概论第一章答案精讲:ISA、微架构与算法性质

简介:计算机系统概论(原书第二版)第一章习题答案以PDF形式提供,面向计算机专业学生、考研读者和自学入门者,用于对照教材习题检验对计算机系统基础概念的掌握。内容选自原书附录的精选解答,覆盖冯诺依曼通用…

2026/10/14 16:41:53 阅读更多 →
远视储备与近视防控:从原理到实操的家长指南

远视储备与近视防控:从原理到实操的家长指南

1. 远视储备不是“储备”,而是一笔会不断消耗的视力存款1. 远视储备不是“储备”,而是一笔会不断消耗的视力存款1.1 远视储备到底是什么很多家长第一次听到“远视储备”这个词,是在幼儿园体检或者眼科门诊的报告单上。医生指着上面的数字说&a…

2026/10/14 16:41:53 阅读更多 →
Python数据挖掘实战:K均值聚类从原理到应用

Python数据挖掘实战:K均值聚类从原理到应用

1. 从一个真实需求说起:为什么K均值聚类值得你花时间搞懂做数据挖掘这些年,我越来越觉得,K均值聚类是那种“看起来简单、用起来真香、但踩坑也真不少”的算法。很多刚入门的朋友一听到“无监督学习”四个字就头大,觉得没有标签怎么…

2026/10/14 16:41:53 阅读更多 →
MinGW-w64离线安装包:断网Windows下C/C++工具链部署指南

MinGW-w64离线安装包:断网Windows下C/C++工具链部署指南

简介:MinGW-w64是为64位Windows系统打造的GCC工具链离线安装包,面向需要在Windows环境下学习或开展C语言开发的程序员。压缩包约2000个文件、133.98MB,主要由h头文件、Python脚本、a静态库、pyc编译文件、exe可执行程序、dll动态库及少量c源文…

2026/10/14 16:40:52 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →