# 第三周周记:从组合类型到数据结构,正式踏入“结构化“世界
charc;};sizeof(union Data)取最大成员的大小。同一时刻只能有效使用一个成员写了一个再读另一个得到的是重新解释的二进制位。适用场景需要用同一段内存表示不同类型数据时比如硬件寄存器映射、类型标记的通用数据容器。1.4 枚举enum枚举就是给一组整数常量起名字提高可读性enumColor{RED,GREEN,BLUE};RED 0, GREEN 1, BLUE 2默认从0开始递增也可以手动指定值。比#define更好的地方在于枚举有类型检查调试时能看到符号名。1.5 typedef——给类型起别名typedef不是定义新类型而是给已有类型起个短名字typedefunsignedlongulong;typedefstructStudent{charname[20];intage;}Student;// 以后可以写 Student 而不写 struct Student这周写链表代码时大量用到 typedef比如typedefstructLNode{intdata;structLNode*next;}LNode,*LinkList;LinkList就是LNode*的别名这样函数参数写LinkList L比写struct LNode *L简洁多了。二、预处理与文件组织——编译之前的魔法教案152.1 预处理是什么C代码从源文件到可执行文件要经过预处理 → 编译 → 汇编 → 链接四个阶段。预处理发生在编译之前由预处理器处理所有#开头的指令。2.2 宏定义#define无参宏——文本替换#definePI3.14159#defineMAX_SIZE100带参宏——注意括号陷阱#defineSQUARE(x)((x)*(x))如果不加括号SQUARE(23)会变成23*23 11而不是25。这是宏最容易踩的坑。带参宏和函数的区别宏是文本替换没有类型检查、没有调用开销函数有类型安全但有函数调用开销宏参数可能被多次求值副作用问题2.3 条件编译条件编译让同一份源码可以根据条件编译出不同版本#ifdefDEBUGprintf(调试信息: x %d\n,x);#endif#ifVERSION2// V2功能#else// V1功能#endif常用指令#ifdef、#ifndef、#if、#elif、#else、#endif头文件防重复包含就是条件编译最经典的应用#ifndef__LIST_H__#define__LIST_H__// 头文件内容#endif2.4 文件包含#include#includestdio.h// 系统头文件在系统目录找#includelist.h// 自定义头文件先在当前目录找2.5 多文件组织真正项目不会把所有代码写在一个.c里。标准做法是.h头文件放声明函数原型、结构体定义、宏定义、外部变量声明.c源文件放实现编译时分别编译各.c文件最后链接在一起。三、数据结构概述与时间复杂度3.1 什么是数据结构数据结构是相互之间存在一种或多种特定关系的数据元素的集合。说白了就是研究数据怎么存、怎么组织。数据结构分两层逻辑结构数据之间的逻辑关系线性、树形、图状、集合物理结构存储结构数据在计算机里怎么存顺序存储、链式存储、索引存储、散列存储3.2 什么是算法算法是解决特定问题求解步骤的描述具有五个特性有穷性确定性可行性输入0个或多个输出1个或多个3.3 时间复杂度——BigO表示法衡量算法效率的标尺。用O(f(n))表示n是问题规模。推导规则用常数1取代所有加法常数只保留最高阶项最高阶项系数化为1常见时间复杂度排序从小到大复杂度名称典型场景O(1)常数阶数组下标访问O(log n)对数阶二分查找O(n)线性阶遍历数组O(n log n)线性对数阶快速排序、归并排序O(n²)平方阶冒泡排序、简单选择排序O(n³)立方阶矩阵乘法O(2ⁿ)指数阶汉诺塔递归空间复杂度类似衡量算法运行过程中额外占用的内存空间。四、线性表——数据结构的第一个正经结构4.1 线性表概念线性表n个具有相同特性的数据元素的有限序列。特点第一个元素无前驱最后一个元素无后继中间元素有且仅有一个前驱和一个后继元素之间是一对一的关系4.2 顺序表顺序表是线性表的顺序存储实现——用一段连续的内存空间依次存储数据元素。静态分配#defineMaxSize50typedefstruct{intdata[MaxSize];intlength;}SqList;数组大小固定编译时就确定不能扩展。动态分配typedefstruct{int*data;intMaxSize;intlength;}SeqList;用malloc动态申请内存用realloc扩容更灵活。4.3 顺序表基本操作插入在第i个位置插入元素从最后一个元素开始往后挪时间复杂度 O(n)删除删除第i个位置的元素从第i1个元素开始往前挪时间复杂度 O(n)按位查找直接下标访问O(1)按值查找从头遍历O(n)判空length 0清空length 0遍历for循环输出O(n)这周写了一道顺序表合并的练习题把两个有序顺序表 A 和 B 合并成有序顺序表 C。用的是双指针归并的思想时间复杂度 O(mn)。五、单链表5.1 为什么需要链表顺序表的优点是随机访问快O(1)下标访问但插入删除要大量移动元素。链表用链式存储解决了这个问题——元素可以散布在内存任意位置用指针串起来。5.2 单链表结构typedefstructLNode{intdata;structLNode*next;}LNode,*LinkList;带头结点vs不带头结点带头结点的链表头结点的next指向第一个数据结点这样插入/删除第一个位置的操作和其他位置统一不用特殊处理头指针。这周写的链表代码全部采用带头结点设计。5.3 单链表基本操作头插法建表新结点插在头结点后面结果和输入顺序相反尾插法建表新结点插在最后结果和输入顺序一致按位插入/删除找到第 i-1 个结点修改指针O(n)按值查找从头遍历比较O(n)遍历输出从头到尾走一遍O(n)求表长遍历计数销毁逐个 free 结点5.4 本周链表实战这周我写了一个完整的带头结点链表操作程序包含头插、尾插头删、尾删新增按位插入、按位删除、按位查找按值查找遍历、判空、清空、销毁踩了一个坑我用了两个结构体——HeadNode存 size next 指针和LNode存 data next 指针导致HeadNode*和LinkList即LNode*是不同类型GCC 15 编译器报了-Wincompatible-pointer-types错误。修复方式是遍历时从L-next第一个数据结点开始对第1个位置单独处理。还写了三道数据结构编程题顺序表合并双指针归并A{1,3,5,7,9} B{2,4,6,8,10} → C{1,2,…,10}有序链表构建输入10个无序整数用插入排序思想构建升序链表单链表就地逆置用头插法把每个结点重新插到头结点后面不额外开辟数据结点空间六、本周收获与反思知识体系搭建这周最大的收获是完成了从零散C语法到系统化数据结构的过渡领域本周内容C语言语法结构体、联合体、枚举、typedef、内存对齐C语言工程预处理宏/条件编译、多文件组织数据结构基础数据结构定义、算法定义、时间复杂度线性表顺序表静态/动态、单链表踩坑总结结构体类型不兼容不同结构体指针不能直接赋值即使成员一样。编译器是对的类型安全很重要。宏的括号陷阱带参宏每个参数和整体都要加括号不然运算优先级会出问题。链表头结点的好处统一了第一个位置的插入/删除逻辑写代码时少很多 if-else。下周计划继续深入单链表操作双向链表、循环链表开始学习栈和队列多写代码把每个操作都手写一

相关新闻

Typora高效文字高亮与标红:3种方案与实战技巧

Typora高效文字高亮与标红:3种方案与实战技巧

1. 为什么我们需要在Typora里高亮和标红文字?如果你和我一样,长期使用Typora作为主力Markdown编辑器,那你肯定遇到过这样的场景:写一篇技术文档,想把某个关键参数或者一个重要的警告信息突出显示;整理一份学…

2026/10/11 20:25:01 阅读更多 →
真火壁炉科普:室内烟管越长取暖越好?烟管很短等于浪费热量?

真火壁炉科普:室内烟管越长取暖越好?烟管很短等于浪费热量?

不少准备安装燃木真火壁炉的业主都会产生同一个疑问:高温烟气会通过烟管向外排出,室内裸露烟管越长,留存室内的热量是不是越高;烟管越短,热量直接排到室外,造成热能浪费?这个说法只说对了一半。…

2026/10/12 20:31:58 阅读更多 →
2026年12月PMP首考:别人还在纠结考不考,你已经值回票价了

2026年12月PMP首考:别人还在纠结考不考,你已经值回票价了

兄弟们,又见面了。前面翻来覆去讲考纲变化、报名流程、备考计划,估计你们耳朵都起茧子了。今天咱们聊点不一样的——PMP这张证到底值不值得考?考完了到底能给你带来什么?毕竟3900块的报名费加两三千的培训费,加起来小一…

2026/10/4 7:23:54 阅读更多 →

最新新闻

同步发电机突然三相短路暂态过程Simulink仿真实现与分析

同步发电机突然三相短路暂态过程Simulink仿真实现与分析

同步发电机的突然三相短路,基本上每个学电机和电力系统的人都绕不过去。教材里那一串用暂态电抗、次暂态电抗、时间常数堆出来的公式,推导过程极其劝退,算出来的冲击电流倍数也让人没什么实感。前阵子我刚好用Simulink把同步发电机突然三相短…

2026/10/13 21:32:27 阅读更多 →
CATIA V5基础教程:界面认知与鼠标中键、指南针操作详解

CATIA V5基础教程:界面认知与鼠标中键、指南针操作详解

简介:CATIA基础教程基本操作PPT学习教案是一份面向CATIA V5初学者的入门教学课件,重点解决新手不熟悉界面布局、不掌握基本交互的问题。课件从工作界面认知入手,系统讲解菜单栏的常见菜单分类、公共工具栏(视图、图形属性、测量&a…

2026/10/13 21:32:27 阅读更多 →
同步发电机突然三相短路Simulink仿真与暂态波形解读

同步发电机突然三相短路Simulink仿真与暂态波形解读

同步发电机突然三相短路,是电力系统教科书里反复强调的重头戏,也是每个电气工程专业学生绕不过去的坎。很多人把理论背得滚瓜烂熟,但一问他短路电流里为什么有直流分量、次暂态和暂态到底怎么从波形上看出来,就支支吾吾了。这篇内…

2026/10/13 21:32:27 阅读更多 →
Codex新模型接入指南:解决模型选择与配置不生效问题

Codex新模型接入指南:解决模型选择与配置不生效问题

最近遇到一个特别典型的问题:某个新发布的大模型,在官方网站和聊天界面里用得挺欢,但只要换到 Codex 这种命令行编程工具里,要么报model not found,要么始终在用旧的 Base 模型,新模型的上下文窗口和推理能…

2026/10/13 21:32:27 阅读更多 →
VLC时钟控制原理与毫秒级音视频同步实战

VLC时钟控制原理与毫秒级音视频同步实战

1. 项目概述:这不是调时间,是给视频流装上“精准节拍器”“vlc时钟控制”——这五个字在普通用户眼里可能只是“VLC播放器里那个不起眼的设置项”,但在音视频处理、直播推流、多机同步、教育录播、工业视觉检测等真实场景中,它本质…

2026/10/13 21:32:27 阅读更多 →
Qt MinGW 编译 PCL 全家桶:Boost/Eigen/FLANN/Qhull/VTK 完整指南

Qt MinGW 编译 PCL 全家桶:Boost/Eigen/FLANN/Qhull/VTK 完整指南

简介:本资源面向需要在Windows平台使用Qt与MinGW工具链构建三维点云应用的C开发者,提供PCL点云库及其全套依赖的编译成果。PCL专注三维点云采集、预处理、特征提取与表面重建,Qt负责跨平台图形界面,MinGW提供原生Windows编译工具链…

2026/10/13 21:31:26 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 18:11:17 阅读更多 →