更新README文档,添加GitHub链接和完善项目结构描述
This commit is contained in:
@@ -5,122 +5,98 @@
|
||||
|
||||
## 项目结构
|
||||
|
||||
### 📚 翁凯C语言/
|
||||
翁凯老师C语言课程的完整代码实现,按章节组织:
|
||||
### 📚 翁凯C语言/ - 系统化学习路径
|
||||
翁凯老师C语言课程的完整代码实现,**每个文件都包含详细的学习笔记和注释**,是宝贵的学习资源:
|
||||
|
||||
- **第1章** - C语言入门
|
||||
- Hello World程序
|
||||
- 基础数学运算
|
||||
- 猜数游戏
|
||||
- 数组倒序排列
|
||||
#### 🌟 学习笔记亮点
|
||||
- **概念解释清晰**:每个重要概念都有详细的文字说明
|
||||
- **实例丰富**:结合具体代码示例进行解释
|
||||
- **重点突出**:用注释标记出容易出错和需要注意的地方
|
||||
- **系统性强**:按照知识点的逻辑关系组织笔记内容
|
||||
- **实用性高**:包含实际编程中的技巧和最佳实践
|
||||
|
||||
- **第2章** - 循环与判断
|
||||
- 硬币兑换问题
|
||||
- 阶乘计算(多种实现)
|
||||
- 求和算法
|
||||
- 最大公约数(辗转相除法)
|
||||
- 整数分解
|
||||
- 素数判断
|
||||
#### 📖 章节内容(130+个代码文件)
|
||||
|
||||
- **第3章** - 数据类型与运算
|
||||
- 字符类型处理
|
||||
- 数字朗读程序
|
||||
- 九九乘法表
|
||||
- 水仙花数
|
||||
- 浮点数精度
|
||||
- 逻辑运算
|
||||
- 分式约分
|
||||
**基础入门阶段(第1-3章)**
|
||||
- **第1章** - C语言入门:Hello World、数学运算、猜数游戏、数组倒序
|
||||
- **第2章** - 循环与算法:硬币问题、阶乘计算、求和算法、最大公约数、素数判断
|
||||
- **第3章** - 数据类型与运算:字符处理、九九乘法表、水仙花数、浮点数精度、逻辑运算
|
||||
|
||||
- **第4章** - 函数
|
||||
- 函数定义与使用
|
||||
- 参数传递机制
|
||||
- 递归函数
|
||||
- 局部变量作用域
|
||||
**核心概念阶段(第4-6章)**
|
||||
- **第4章** - 函数:函数定义与使用📝、参数传递、递归函数、局部变量
|
||||
- **第5章** - 数组:冒泡排序算法📝、矩阵运算、杨辉三角、素数筛选
|
||||
- **第6章** - 指针:指针变量基础📝、指针与数组、动态内存分配、函数指针
|
||||
|
||||
- **第5章** - 数组
|
||||
- 一维数组操作
|
||||
- 二维数组与矩阵
|
||||
- 冒泡排序算法
|
||||
- 素数筛选
|
||||
- 杨辉三角
|
||||
- 矩阵运算
|
||||
**高级特性阶段(第7-9章)**
|
||||
- **第7章** - 字符串:字符串基础📝、字符串函数、字符串数组、回文字符串
|
||||
- **第8章** - 结构体:结构类型📝、结构体与函数、动态链表、枚举类型
|
||||
- **第9章** - 程序结构:宏定义📝、全局变量、头文件使用、大型程序组织
|
||||
|
||||
- **第6章** - 指针
|
||||
- 指针基础概念
|
||||
- 指针与数组
|
||||
- 动态内存分配
|
||||
- 函数指针
|
||||
- 指针数组
|
||||
**专业应用阶段(第10-13章)**
|
||||
- **第10章** - 文件操作:文件输入输出📝、格式化读写、二进制文件处理
|
||||
- **第11章** - 位运算:按位运算符、移位运算、位段操作
|
||||
- **第12章** - 动态数据结构:可变数组实现、自动增长机制、数据访问优化
|
||||
- **第13章** - 链表:单向链表实现、链表函数封装、链表搜索算法
|
||||
|
||||
- **第7章** - 字符串
|
||||
- 字符串基础操作
|
||||
- 字符串函数(strlen, strcpy, strcmp)
|
||||
- 字符串数组
|
||||
- 回文字符串
|
||||
> 📝 标记的文件包含特别详细的学习笔记,强烈推荐重点学习
|
||||
|
||||
- **第8章** - 结构体
|
||||
- 结构体定义与使用
|
||||
- 结构体与函数
|
||||
- 嵌套结构体
|
||||
- 动态链表
|
||||
- 枚举类型
|
||||
- 联合体
|
||||
详细学习指南请查看:[翁凯C语言学习指南](翁凯C语言/README.md)
|
||||
|
||||
- **第9章** - 程序结构
|
||||
- 全局变量
|
||||
- 静态变量
|
||||
- 头文件使用
|
||||
- 宏定义
|
||||
- 大型程序组织
|
||||
### 🎯 课上代码练习/ - 实战项目训练
|
||||
课堂实践代码,从基础练习到高级AI项目的完整实战训练:
|
||||
|
||||
- **第10章** - 文件操作
|
||||
- 文件输入输出
|
||||
- 格式化读写
|
||||
- 二进制文件处理
|
||||
#### 基础练习模块
|
||||
- **C语言初识**:Hello World和基础语法
|
||||
- **数值处理**:最大值查找、求和算法
|
||||
- **字符函数**:字符处理和转换
|
||||
- **条件判断**:逻辑控制结构
|
||||
- **BMI计算器**:实用工具开发
|
||||
|
||||
- **第11章** - 位运算
|
||||
- 按位运算符
|
||||
- 移位运算
|
||||
- 位段操作
|
||||
#### 🎮 五子棋AI项目 - 高级算法实战
|
||||
**项目概述**:基于C语言实现的高级五子棋人机对战系统
|
||||
|
||||
- **第12章** - 动态数据结构
|
||||
- 可变数组实现
|
||||
- 自动增长机制
|
||||
- 数据访问优化
|
||||
**核心技术特点**:
|
||||
- **AI算法**:α-β剪枝优化的极小极大算法(3层搜索深度)
|
||||
- **棋盘系统**:支持5x5到25x25的动态棋盘尺寸
|
||||
- **智能评估**:完整的棋型评估系统(活四、冲四、活三等)
|
||||
- **游戏功能**:复盘系统、胜负判断、平局检测
|
||||
- **用户体验**:清晰的棋盘界面显示和交互
|
||||
|
||||
- **第13章** - 链表
|
||||
- 单向链表实现
|
||||
- 链表函数封装
|
||||
- 链表搜索算法
|
||||
- 链表删除操作
|
||||
- 链表清除功能
|
||||
**算法亮点**:
|
||||
- **防御策略**:优先检查玩家威胁棋型(活四、冲四、活三)
|
||||
- **进攻策略**:使用极小极大算法计算最佳落子位置
|
||||
- **搜索优化**:α-β剪枝提升搜索效率,仅考虑已有棋子周围2格范围
|
||||
- **评分系统**:活四(100000分)、冲四(10000分)、活三(5000分)等分级评估
|
||||
- **位置奖励**:中心位置价值更高的启发式评估
|
||||
|
||||
### 🎯 课上代码练习/
|
||||
课堂实践代码,包含基础练习和项目实战:
|
||||
**技术实现**:
|
||||
- **核心函数**:ai_move()决策、evaluate_pos()评估、dfs()搜索
|
||||
- **数据结构**:ChessPattern结构体记录棋型信息
|
||||
- **复盘系统**:完整记录每一步落子,支持逐步回放
|
||||
|
||||
#### 基础练习(1.1.1 - 1.1.7)
|
||||
- C语言初识
|
||||
- 数值处理(最大值、求和)
|
||||
- 字符函数应用
|
||||
- 大小写转换
|
||||
- 条件判断
|
||||
- BMI计算器
|
||||
详细技术文档请查看:[五子棋AI项目完整文档](课上代码练习/五子棋/README.md)
|
||||
|
||||
#### 🎮 五子棋项目
|
||||
完整的五子棋人机对战系统,技术特点:
|
||||
- **AI算法**:α-β剪枝优化的极小极大算法
|
||||
- **棋盘支持**:5x5到25x25可调尺寸
|
||||
- **智能评估**:完整的棋型评估系统
|
||||
- **游戏功能**:复盘系统、胜负判断
|
||||
- **用户体验**:清晰的界面显示
|
||||
### 📊 数据结构/ - 算法基础实现
|
||||
专注于基础数据结构的C语言实现,理论与实践相结合:
|
||||
|
||||
详细文档请查看:[五子棋项目README](课上代码练习/五子棋/README.md)
|
||||
**核心内容**:
|
||||
- **线性表**:数组基础操作和内存管理
|
||||
- **动态结构**:结构体封装的数据操作
|
||||
- **算法实现**:插入、删除、查找的时间复杂度分析
|
||||
|
||||
### 📝 草稿/
|
||||
临时代码和实验性代码:
|
||||
- 测试代码片段
|
||||
- 算法草稿
|
||||
- 文档模板
|
||||
**实现特色**:
|
||||
- **内存安全**:完善的边界检查和错误处理
|
||||
- **用户交互**:友好的输入验证和错误提示
|
||||
- **代码组织**:模块化设计和函数封装
|
||||
- **交互界面**:完整的命令行菜单系统
|
||||
|
||||
**学习价值**:
|
||||
- 掌握基本数据结构的实现原理
|
||||
- 理解算法的时间复杂度和空间复杂度
|
||||
- 培养安全编程和错误处理的意识
|
||||
- 为后续学习高级数据结构打下基础
|
||||
|
||||
详细学习指南请查看:[数据结构学习文档](数据结构/README.md)
|
||||
|
||||
## 技术栈
|
||||
|
||||
@@ -149,22 +125,93 @@ gcc "五子棋 copy 3.c" -o gomoku -lm
|
||||
|
||||
## 学习路径建议
|
||||
|
||||
### 🔰 初学者路径
|
||||
1. **基础语法**:从翁凯C语言第1-3章开始
|
||||
2. **函数理解**:学习第4章函数概念
|
||||
3. **数组掌握**:重点练习第5章数组操作
|
||||
4. **指针突破**:深入理解第6章指针概念
|
||||
### 🔰 初学者路径(建议学习时间:2-3个月)
|
||||
|
||||
### 🚀 进阶路径
|
||||
1. **字符串处理**:第7章字符串操作
|
||||
2. **数据结构**:第8章结构体和第13章链表
|
||||
3. **文件操作**:第10章文件处理
|
||||
4. **项目实战**:五子棋AI项目
|
||||
**第一阶段:基础语法掌握(2-3周)**
|
||||
1. **翁凯C语言第1-3章**:从Hello World到数据类型
|
||||
- 重点关注:变量定义、运算符、控制结构
|
||||
- 实践建议:每个代码文件都要亲自编译运行
|
||||
- 学习笔记:仔细阅读代码中的详细注释
|
||||
|
||||
### 💡 高级应用
|
||||
1. **位运算优化**:第11章位操作
|
||||
2. **动态内存**:第12章可变数组
|
||||
3. **程序架构**:第9章大型程序设计
|
||||
**第二阶段:核心概念突破(3-4周)**
|
||||
2. **函数理解**:翁凯C语言第4章
|
||||
- 📝 重点文件:`函数的定义和使用.c`(包含详细学习笔记)
|
||||
- 理解函数的封装思想和参数传递机制
|
||||
3. **数组掌握**:翁凯C语言第5章
|
||||
- 📝 重点文件:`数组的例子:冒泡排序.c`(深入分析算法思维)
|
||||
- 掌握一维、二维数组的操作方法
|
||||
4. **指针突破**:翁凯C语言第6章
|
||||
- 📝 重点文件:`指针变量:记录地址的变量.c`(系统性指针概念解析)
|
||||
- 这是C语言的核心难点,需要多练习和理解
|
||||
|
||||
**第三阶段:基础实践(1-2周)**
|
||||
5. **课上代码练习**:基础练习模块
|
||||
- 完成C语言初识到BMI计算器的所有练习
|
||||
- 巩固前面学到的语法和概念
|
||||
|
||||
### 🚀 进阶路径(建议学习时间:2-3个月)
|
||||
|
||||
**第一阶段:高级特性学习(3-4周)**
|
||||
1. **字符串处理**:翁凯C语言第7章
|
||||
- 📝 重点文件:`字符串.c`(C语言字符串本质深度剖析)
|
||||
- 掌握字符串的本质和标准库函数
|
||||
2. **结构体应用**:翁凯C语言第8章
|
||||
- 📝 重点文件:`结构类型.c`(结构体完整知识体系)
|
||||
- 理解自定义数据类型的重要性
|
||||
3. **程序结构**:翁凯C语言第9章
|
||||
- 📝 重点文件:`宏定义.c`(预处理器工作原理深度解析)
|
||||
- 学习大型程序的组织方法
|
||||
|
||||
**第二阶段:数据结构基础(2-3周)**
|
||||
4. **数据结构模块**:
|
||||
- 学习线性表的基本操作
|
||||
- 理解时间复杂度和空间复杂度
|
||||
- 掌握安全编程和错误处理
|
||||
5. **动态数据结构**:翁凯C语言第12-13章
|
||||
- 可变数组和链表的实现
|
||||
- 动态内存管理
|
||||
|
||||
**第三阶段:文件和位运算(1-2周)**
|
||||
6. **文件操作**:翁凯C语言第10章
|
||||
- 📝 重点文件:`文件输入输出.c`(文件操作标准模式)
|
||||
7. **位运算优化**:翁凯C语言第11章
|
||||
- 理解底层数据表示和操作
|
||||
|
||||
### 💡 高级应用路径(建议学习时间:1-2个月)
|
||||
|
||||
**项目实战阶段**
|
||||
1. **五子棋AI项目**:
|
||||
- **算法学习**:理解α-β剪枝和极小极大算法
|
||||
- **系统设计**:学习复杂项目的架构设计
|
||||
- **代码优化**:掌握搜索算法的优化技巧
|
||||
- **调试技能**:培养大型项目的调试能力
|
||||
|
||||
**深度学习建议**
|
||||
2. **算法优化**:
|
||||
- 研究五子棋AI的评估函数设计
|
||||
- 学习搜索算法的剪枝策略
|
||||
- 理解启发式算法的应用
|
||||
3. **系统编程**:
|
||||
- 深入理解内存管理
|
||||
- 学习程序性能优化
|
||||
- 掌握跨平台编程技巧
|
||||
|
||||
### 📚 学习资源推荐
|
||||
|
||||
**在线课程**:
|
||||
- [翁凯老师C语言MOOC课程](https://www.icourse163.org/course/ZJU-199001)
|
||||
- 配合本代码库的详细学习笔记一起学习
|
||||
|
||||
**学习工具**:
|
||||
- **编译器**:GCC或Visual Studio Code + C/C++扩展
|
||||
- **调试工具**:GDB调试器,VS Code内置调试功能
|
||||
- **在线练习**:牛客网、LeetCode(C语言版本)
|
||||
|
||||
**学习方法**:
|
||||
- **理论与实践结合**:每学一个概念都要编写代码验证
|
||||
- **笔记整理**:参考代码中的详细注释,整理自己的学习笔记
|
||||
- **项目驱动**:通过完整项目(如五子棋)来综合运用所学知识
|
||||
- **循序渐进**:不要跳跃式学习,每个阶段都要扎实掌握
|
||||
|
||||
## 代码特色
|
||||
|
||||
@@ -186,34 +233,161 @@ gcc "五子棋 copy 3.c" -o gomoku -lm
|
||||
|
||||
## 项目亮点
|
||||
|
||||
### 🎯 五子棋AI系统
|
||||
- **智能对战**:实现了具有挑战性的AI对手
|
||||
- **算法优化**:使用α-β剪枝提升搜索效率
|
||||
- **完整功能**:包含复盘、胜负判断等完整游戏体验
|
||||
### 📝 详细学习笔记体系
|
||||
- **130+个代码文件**:每个文件都包含详细的学习笔记和概念解析
|
||||
- **重点文件标注**:📝标记的文件包含特别详细的学习笔记
|
||||
- **概念深度解析**:将抽象概念用具体代码和注释进行详细说明
|
||||
- **学习路径清晰**:从基础语法到高级应用的完整知识体系
|
||||
- **实践价值高**:笔记内容结合实际编程经验和技巧
|
||||
|
||||
### 📚 完整学习体系
|
||||
- **循序渐进**:从基础到高级的完整学习路径
|
||||
- **实战结合**:理论学习与项目实践相结合
|
||||
- **代码质量**:注重代码规范和最佳实践
|
||||
### 🎯 五子棋AI算法系统
|
||||
- **高级算法实现**:α-β剪枝优化的极小极大算法(3层搜索深度)
|
||||
- **智能评估系统**:活四(100000分)、冲四(10000分)等分级评估
|
||||
- **搜索优化策略**:仅考虑已有棋子周围2格范围,中心位置奖励
|
||||
- **完整游戏功能**:复盘系统、胜负判断、平局检测
|
||||
- **技术文档详尽**:包含算法流程图、核心函数说明、实现细节
|
||||
|
||||
### 📊 数据结构实践基础
|
||||
- **理论实践结合**:基础数据结构的完整C语言实现
|
||||
- **安全编程示范**:完善的边界检查和错误处理机制
|
||||
- **交互系统完整**:友好的命令行界面和输入验证
|
||||
- **学习价值突出**:为后续学习高级数据结构和算法打下坚实基础
|
||||
|
||||
### 🚀 完整学习生态系统
|
||||
- **循序渐进**:从基础语法→核心概念→高级特性→项目实战的完整路径
|
||||
- **多维度学习**:理论学习、代码实践、项目开发、算法优化全覆盖
|
||||
- **代码质量高**:统一的编码规范、详细的注释、完整的错误处理
|
||||
- **实用性强**:每个模块都有明确的学习目标和实际应用价值
|
||||
|
||||
## 使用说明
|
||||
|
||||
1. **克隆仓库**:
|
||||
```bash
|
||||
git clone https://github.com/LHY0125/Learn_C.git
|
||||
cd Learn_C
|
||||
```
|
||||
### 📥 获取代码库
|
||||
```bash
|
||||
git clone https://github.com/LHY0125/Learn_C.git
|
||||
cd Learn_C
|
||||
```
|
||||
|
||||
2. **选择学习内容**:
|
||||
- 基础学习:进入`翁凯C语言/`对应章节
|
||||
- 项目实战:进入`课上代码练习/五子棋/`
|
||||
- 快速练习:查看`课上代码练习/`基础练习
|
||||
### 📚 学习模块使用指南
|
||||
|
||||
3. **编译运行**:
|
||||
```bash
|
||||
gcc 文件名.c -o 输出名
|
||||
./输出名
|
||||
```
|
||||
#### 1. 翁凯C语言系统学习
|
||||
```bash
|
||||
# 进入翁凯C语言目录
|
||||
cd 翁凯C语言/
|
||||
|
||||
# 按章节学习,例如学习第4章函数
|
||||
cd 4/
|
||||
gcc "函数的定义和使用.c" -o function_demo
|
||||
./function_demo
|
||||
|
||||
# 查看学习笔记(重点推荐)
|
||||
# 📝 标记的文件包含详细学习笔记,建议优先学习
|
||||
```
|
||||
|
||||
**学习建议**:
|
||||
- 按照第1-13章的顺序逐步学习
|
||||
- 重点关注📝标记的文件,包含详细学习笔记
|
||||
- 每个代码文件都要亲自编译运行
|
||||
- 仔细阅读代码中的注释和概念解析
|
||||
|
||||
#### 2. 五子棋AI项目实战
|
||||
```bash
|
||||
# 进入五子棋项目目录
|
||||
cd 课上代码练习/五子棋/
|
||||
|
||||
# 编译最新版本(推荐)
|
||||
gcc "五子棋 copy 3.c" -o gomoku -lm
|
||||
|
||||
# 运行游戏
|
||||
./gomoku
|
||||
|
||||
# 游戏操作说明:
|
||||
# 1. 输入棋盘尺寸(5-25,默认15)
|
||||
# 2. 玩家输入坐标格式:行 列(如"8 8")
|
||||
# 3. AI自动计算最佳落子位置
|
||||
# 4. 游戏结束后可选择查看完整复盘
|
||||
```
|
||||
|
||||
**技术学习重点**:
|
||||
- 理解α-β剪枝算法的实现原理
|
||||
- 学习棋型评估系统的设计思路
|
||||
- 掌握搜索算法的优化策略
|
||||
- 研究AI决策函数的实现细节
|
||||
|
||||
#### 3. 数据结构基础实践
|
||||
```bash
|
||||
# 进入数据结构目录
|
||||
cd 数据结构/
|
||||
|
||||
# 编译数组操作程序
|
||||
gcc "结构体实现插入元素.c" -o array_operations
|
||||
|
||||
# 运行交互式程序
|
||||
./array_operations
|
||||
|
||||
# 程序功能:
|
||||
# - 动态数组插入操作
|
||||
# - 元素删除功能
|
||||
# - 数组查找操作
|
||||
# - 数组遍历显示
|
||||
# - 安全输入验证
|
||||
```
|
||||
|
||||
**学习重点**:
|
||||
- 理解线性表的基本操作实现
|
||||
- 掌握时间复杂度和空间复杂度分析
|
||||
- 学习安全编程和错误处理技巧
|
||||
- 培养模块化设计思维
|
||||
|
||||
#### 4. 课堂基础练习
|
||||
```bash
|
||||
# 进入课上代码练习目录
|
||||
cd 课上代码练习/
|
||||
|
||||
# 编译基础练习(以BMI计算器为例)
|
||||
gcc "1.1.7 BMI.c" -o bmi_calculator
|
||||
./bmi_calculator
|
||||
```
|
||||
|
||||
### 🛠️ 编译说明
|
||||
|
||||
#### 基本编译命令
|
||||
```bash
|
||||
# 单文件编译
|
||||
gcc filename.c -o output
|
||||
|
||||
# 需要数学库的程序(如五子棋)
|
||||
gcc filename.c -o output -lm
|
||||
|
||||
# 调试模式编译
|
||||
gcc -g filename.c -o output
|
||||
```
|
||||
|
||||
#### 常见编译问题解决
|
||||
```bash
|
||||
# 中文编码问题(Windows)
|
||||
gcc -fexec-charset=GBK filename.c -o output
|
||||
|
||||
# UTF-8编码(推荐)
|
||||
gcc -finput-charset=UTF-8 -fexec-charset=UTF-8 filename.c -o output
|
||||
```
|
||||
|
||||
### 📖 学习路径推荐
|
||||
|
||||
**初学者(0基础)**:
|
||||
1. 翁凯C语言第1-3章(基础语法)
|
||||
2. 课上代码练习基础模块(巩固练习)
|
||||
3. 翁凯C语言第4-6章(核心概念)
|
||||
4. 数据结构基础实践(理解数据结构)
|
||||
|
||||
**有基础学习者**:
|
||||
1. 翁凯C语言第7-9章(高级特性)
|
||||
2. 翁凯C语言第10-13章(专业应用)
|
||||
3. 五子棋AI项目(算法实战)
|
||||
|
||||
**进阶学习者**:
|
||||
1. 深入研究五子棋AI算法优化
|
||||
2. 扩展数据结构实现(栈、队列、树等)
|
||||
3. 参与开源项目贡献
|
||||
|
||||
## 贡献指南
|
||||
|
||||
@@ -231,7 +405,7 @@ gcc "五子棋 copy 3.c" -o gomoku -lm
|
||||
|
||||
## 联系方式
|
||||
|
||||
如有问题或建议,欢迎通过GitHub Issues联系。
|
||||
如有问题或建议,欢迎通过[GitHub Issues](https://github.com/LHY0125/Learn_C.git)联系。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
# 数据结构学习代码
|
||||
|
||||
本目录包含数据结构相关的C语言实现代码,专注于基础数据结构的学习和实践。
|
||||
|
||||
## 📁 文件列表
|
||||
|
||||
### 核心实现
|
||||
- `数组.c` - 数组基础操作实现
|
||||
- `结构体实现插入元素.c` - 基于结构体的动态数组实现
|
||||
- 包含插入、删除、查找等基本操作
|
||||
- 实现了安全的输入验证机制
|
||||
- 提供交互式命令行界面
|
||||
|
||||
### 可执行文件
|
||||
- `array_operations.exe` - 编译后的数组操作程序
|
||||
|
||||
### 记录文件
|
||||
- `records/` - 程序运行记录和测试数据
|
||||
|
||||
## 🎯 学习重点
|
||||
|
||||
### 数据结构概念
|
||||
- **线性表**:数组的基本操作和内存管理
|
||||
- **动态结构**:结构体封装的数据操作
|
||||
- **算法实现**:插入、删除、查找的时间复杂度分析
|
||||
|
||||
### 编程技巧
|
||||
- **内存安全**:边界检查和错误处理
|
||||
- **用户交互**:输入验证和友好的错误提示
|
||||
- **代码组织**:模块化设计和函数封装
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 编译运行
|
||||
```bash
|
||||
# 编译数组操作程序
|
||||
gcc 结构体实现插入元素.c -o array_operations
|
||||
|
||||
# 运行程序
|
||||
./array_operations
|
||||
```
|
||||
|
||||
### 功能特性
|
||||
- ✅ 动态数组插入操作
|
||||
- ✅ 元素删除功能
|
||||
- ✅ 数组查找操作
|
||||
- ✅ 数组遍历显示
|
||||
- ✅ 安全输入验证
|
||||
- ✅ 交互式菜单系统
|
||||
|
||||
## 📚 学习建议
|
||||
|
||||
1. **理论结合实践**:先理解数据结构的理论概念,再通过代码实现加深理解
|
||||
2. **逐步深入**:从基础的数组操作开始,逐步学习更复杂的数据结构
|
||||
3. **注重效率**:关注算法的时间复杂度和空间复杂度
|
||||
4. **安全编程**:重视边界检查和错误处理的重要性
|
||||
|
||||
## 🔗 相关资源
|
||||
|
||||
- [GitHub仓库](https://github.com/LHY0125/Learn_C.git)
|
||||
- 更多C语言学习资源请参考上级目录的翁凯C语言教程
|
||||
|
||||
---
|
||||
|
||||
> 💡 **提示**:数据结构是编程的基础,掌握好基本的数据结构对后续学习算法和系统设计都非常重要。
|
||||
Binary file not shown.
+20
-20
@@ -165,15 +165,15 @@ int main(void)
|
||||
switch (choice)
|
||||
{
|
||||
case 1: // 插入元素
|
||||
{
|
||||
char prompt[100];
|
||||
sprintf(prompt, "请输入要插入的位置 (0-%d): ", myArray.size);
|
||||
position = getInput(prompt, 0, myArray.size);
|
||||
value = getInput("请输入要插入的值 (-1000到1000): ", -1000, 1000);
|
||||
insert(&myArray, position, value);
|
||||
printf("插入操作完成!\n");
|
||||
}
|
||||
break;
|
||||
{
|
||||
char prompt[100];
|
||||
sprintf(prompt, "请输入要插入的位置 (0-%d): ", myArray.size);
|
||||
position = getInput(prompt, 0, myArray.size);
|
||||
value = getInput("请输入要插入的值 (-1000到1000): ", -1000, 1000);
|
||||
insert(&myArray, position, value);
|
||||
printf("插入操作完成!\n");
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // 查找元素
|
||||
value = getInput("请输入要查找的值 (-1000到1000): ", -1000, 1000);
|
||||
@@ -189,19 +189,19 @@ int main(void)
|
||||
break;
|
||||
|
||||
case 3: // 删除元素
|
||||
{
|
||||
if (myArray.size == 0)
|
||||
{
|
||||
if (myArray.size == 0)
|
||||
{
|
||||
printf("错误:数组为空,无法删除元素!\n");
|
||||
break;
|
||||
}
|
||||
char prompt[100];
|
||||
sprintf(prompt, "请输入要删除的位置 (0-%d): ", myArray.size - 1);
|
||||
position = getInput(prompt, 0, myArray.size - 1);
|
||||
delete(&myArray, position);
|
||||
printf("删除操作完成!\n");
|
||||
printf("错误:数组为空,无法删除元素!\n");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
char prompt[100];
|
||||
sprintf(prompt, "请输入要删除的位置 (0-%d): ", myArray.size - 1);
|
||||
position = getInput(prompt, 0, myArray.size - 1);
|
||||
delete(&myArray, position);
|
||||
printf("删除操作完成!\n");
|
||||
}
|
||||
break;
|
||||
|
||||
case 4: // 打印数组
|
||||
printf("当前数组: ");
|
||||
|
||||
+282
@@ -0,0 +1,282 @@
|
||||
# 翁凯C语言学习代码
|
||||
|
||||
本目录包含了翁凯老师C语言课程的学习代码,按章节组织,涵盖了C语言的各个重要知识点。
|
||||
|
||||
## 📚 学习笔记亮点
|
||||
|
||||
本代码库的一大特色是在每个C文件中都包含了**详细的学习笔记和注释**!这些笔记记录了学习过程中的重要概念、理解要点和实践心得,是非常宝贵的学习资源。
|
||||
|
||||
### 🌟 重点推荐的笔记文件
|
||||
|
||||
以下文件包含了特别详细和深入的学习笔记,强烈建议重点学习:
|
||||
|
||||
- **第4章** `函数的定义和使用.c` - 函数概念的完整解析
|
||||
- **第5章** `数组的例子:冒泡排序.c` - 数组操作和算法思维
|
||||
- **第6章** `指针变量:记录地址的变量.c` - 指针核心概念详解
|
||||
- **第7章** `字符串.c` - C语言字符串本质深度剖析
|
||||
- **第8章** `结构类型.c` - 结构体完整知识体系
|
||||
- **第9章** `宏定义.c` - 预处理器工作原理深度解析
|
||||
- **第10章** `文件输入输出.c` - 文件操作标准模式
|
||||
|
||||
### 📝 笔记特色
|
||||
|
||||
- **概念解释清晰**:每个重要概念都有详细的文字说明
|
||||
- **实例丰富**:结合具体代码示例进行解释
|
||||
- **重点突出**:用注释标记出容易出错和需要注意的地方
|
||||
- **系统性强**:按照知识点的逻辑关系组织笔记内容
|
||||
- **实用性高**:包含实际编程中的技巧和最佳实践
|
||||
|
||||
## 目录结构
|
||||
|
||||
### 第1章 - 基础入门
|
||||
- `average math.c` - 平均数计算
|
||||
- `guess.c` - 猜数游戏
|
||||
- `位数.c` - 数字位数计算
|
||||
- `倒序排列.c` - 数字倒序排列
|
||||
|
||||
### 第2章 - 循环与算法
|
||||
- `coin.c` / `coin2.c` - 硬币问题
|
||||
- `n的阶乘.c` / `n的阶乘2.c` / `n的阶乘3.c` - 阶乘计算的不同实现
|
||||
- `sum.c` / `sum2.c` / `sum3.c` - 求和算法
|
||||
- `最大公约数.c` / `最大公约数2.c` / `最大公约数(辗转相除法).c` - 最大公约数算法
|
||||
- `正序分解整数.c` / `正序分解整数2.c` / `正序分解整数3.c` / `正序整数分解4.c` - 整数分解
|
||||
- `素数判断.c` / `素数判断2.c` / `素数判断3.c` - 素数判断算法
|
||||
|
||||
### 第3章 - 数据类型与运算
|
||||
- `a的连续和.c` - 连续求和
|
||||
- `n项求和.c` - n项求和
|
||||
- `九九乘法表.c` - 乘法表生成
|
||||
- `字符类型.c` - 字符类型操作
|
||||
- `念数字.c` - 数字转文字
|
||||
- `整数的格式化.c` - 整数格式化输出
|
||||
- `整数类型表示数的范围.c` 系列 - 整数类型范围测试
|
||||
- `条件运算和逗号运算.c` - 运算符使用
|
||||
- `水仙花数.c` - 水仙花数计算
|
||||
- `浮点数的范围与精度.c` / `浮点数的输入和输出.c` - 浮点数操作
|
||||
- `猜数游戏.c` - 猜数游戏实现
|
||||
- `类型转换.c` - 数据类型转换
|
||||
- `约分最简分式.c` - 分数约分
|
||||
- `给定条件的整数集.c` - 条件筛选
|
||||
- `统计素数并求和.c` - 素数统计
|
||||
- `逃逸字符.c` - 转义字符使用
|
||||
- `逻辑运算.c` - 逻辑运算符
|
||||
|
||||
### 第4章 - 函数
|
||||
- `从函数的返回值.c` - 函数返回值
|
||||
- `函数原型.c` - 函数声明
|
||||
- `函数嵌套递归.c` - 递归函数
|
||||
- `函数求和.c` - 函数实现求和
|
||||
- `函数的其它细节问题.c` - 函数细节
|
||||
- `函数的定义和使用.c` - **函数基础** 📝
|
||||
> **学习笔记**:详细解释了函数的概念、作用和调用方式
|
||||
> - 函数作用:避免重复代码的封装,可以重复使用
|
||||
> - 函数组成要素:具备函数名、参数列表、参数类型、返回值类型
|
||||
> - 函数调用:使用函数名和函数参数进行调用
|
||||
> - 函数原型:void num_sum(int begin, int end) 详细解析
|
||||
- `参数传递.c` - 参数传递机制
|
||||
- `本地变量.c` - 局部变量
|
||||
|
||||
### 第5章 - 数组
|
||||
- `二维数组.c` - 二维数组基础
|
||||
- `二维数组中的鞍点.c` - 鞍点查找
|
||||
- `二维数组:矩阵运算.c` / `二维数组:矩阵运算2.c` - 矩阵运算
|
||||
- `初试数组.c` - 数组入门
|
||||
- `定义数组.c` - 数组定义
|
||||
- `对称矩阵.c` - 对称矩阵判断
|
||||
- `数组来统计个数.c` - 数组统计
|
||||
- `数组的例子:冒泡排序.c` - **冒泡排序算法** 📝
|
||||
> **学习笔记**:深入分析了素数筛选和数组赋值的核心概念
|
||||
> - 素数筛选算法:从x=2开始,将2x、3x、4x直到ax<n的数标记为合数,重复此过程
|
||||
> - 数组赋值方法:详细说明了直接赋值和循环赋值两种方式
|
||||
> - 重要提醒:数组不能像普通变量一样直接赋值
|
||||
- `数组的例子:素数.c` / `数组的例子:素数2.c` - 素数筛选
|
||||
- `数组的运算.c` - 数组基本运算
|
||||
- `杨辉三角.c` - 杨辉三角生成
|
||||
- `矩阵对应位置元素相加.c` - 矩阵加法
|
||||
- `矩阵对角线的和.c` - 对角线求和
|
||||
- `矩阵的应用.c` - 矩阵应用
|
||||
- `矩阵的最大值.c` - 矩阵最值
|
||||
- `转置矩阵.c` - 矩阵转置
|
||||
|
||||
### 第6章 - 指针
|
||||
- `函数指针.c` - 函数指针使用
|
||||
- `动态内存分配.c` - 内存动态分配
|
||||
- `取地址计算:&运算符取得变量的地址.c` - 地址运算
|
||||
- `指针与const:指针本身和所指的变量都可能const.c` - const指针
|
||||
- `指针与数组.c` - 指针数组操作
|
||||
- `指针函数.c` - 返回指针的函数
|
||||
- `指针变量:记录地址的变量.c` - **指针变量基础** 📝
|
||||
> **学习笔记**:系统性地解释了指针的核心概念和使用方法
|
||||
> - 指针变量定义:变量的值是内存的地址,与普通变量存储实际值不同
|
||||
> - 访问地址变量:*p表示p指向的变量的值,*是单目运算符
|
||||
> - 指针的双重用途:可以做右值也可以做左值(int k=*p; *p=k+1;)
|
||||
> - 实际应用:通过函数参数传递地址来修改变量值
|
||||
- `指针数组.c` - 指针数组
|
||||
- `指针的使用.c` - 指针基本使用
|
||||
- `指针运算.c` - 指针运算
|
||||
|
||||
### 第7章 - 字符串
|
||||
- `单字符的输入输出.c` - 字符I/O
|
||||
- `字符串.c` - **字符串基础** 📝
|
||||
> **学习笔记**:全面讲解了C语言字符串的本质和操作方法
|
||||
> - 字符串定义:以0(即\0)结尾的一串字符,0和'0'不同
|
||||
> - 字符串长度:0标志字符串的结束,计算长度时不包含结尾0
|
||||
> - 存储方式:字符串以数组形式存在,分为数组和指针两种形式
|
||||
> - 字符串常量:"Hello"会被编译器变成一个字符数组放在某处,长度为6
|
||||
> - 重要特性:C语言的字符串是以字符数组的形态存在的
|
||||
> - 标准库:string.h包含很多处理字符串的函数
|
||||
- `字符串中找字符.c` - 字符查找
|
||||
- `字符串中找字符串2.c` - 字符串查找
|
||||
- `字符串函数strcmp.c` - 字符串比较
|
||||
- `字符串函数strcpy.c` - 字符串复制
|
||||
- `字符串函数strlen.c` - 字符串长度
|
||||
- `字符串变量.c` - 字符串变量
|
||||
- `字符串数组.c` / `字符串数组2.c` - 字符串数组
|
||||
- `字符串的输入输出.c` - 字符串I/O
|
||||
- `字符串输出回文字.c` - 回文字符串
|
||||
|
||||
### 第8章 - 结构体
|
||||
- `动态链表.c` - 动态链表实现
|
||||
- `枚举.c` - 枚举类型
|
||||
- `类型定义.c` - 类型定义
|
||||
- `结构与函数.c` / `结构与函数2.c` - 结构体与函数
|
||||
- `结构中的结构3.c` - 嵌套结构体
|
||||
- `结构类型.c` - **结构体类型** 📝
|
||||
> **学习笔记**:详细阐述了结构体的定义、使用和操作方法
|
||||
> - 作用域:在函数内/外定义结构体的区别和使用范围
|
||||
> - 定义方式:三种不同的结构体定义语法和应用场景
|
||||
> - 结构成员:使用.运算符访问结构体成员(如today.day)
|
||||
> - 结构运算:结构体可以直接赋值、取地址,也可以传递给函数
|
||||
> - 结构指针:使用&运算符获取结构体地址,通过指针访问成员
|
||||
> - 初始化:pl = (struct point){5, 10} 的复合字面量语法
|
||||
- `联合.c` - 联合类型
|
||||
|
||||
### 第9章 - 高级特性
|
||||
- `全局变量.c` - 全局变量
|
||||
- `声明.c` - 变量声明
|
||||
- `大程序.c` - 大型程序组织
|
||||
- `头文件.c` - 头文件使用
|
||||
- `宏定义.c` - **宏定义** 📝
|
||||
> **学习笔记**:深入解析了C语言预处理器和宏定义的工作原理
|
||||
> - 预处理指令:以#开头的是编译预处理指令,不是C语言的成分
|
||||
> - 宏定义语法:#define <名字> <值>,注意没有结尾的分号
|
||||
> - 工作原理:预处理器在编译正式开始之前进行全文本替换
|
||||
> - 替换规则:包括函数名在内的所有匹配都会被替换
|
||||
> - 多行宏:值超过一行时,行末需要用\连接
|
||||
> - 预定义宏:__LINE__、__FILE__、__DATE__、__TIME__、__STDC__等
|
||||
> - 调试技巧:gcc --save-temps 可以查看预处理结果
|
||||
- `带参数的宏.c` - 带参数宏
|
||||
- `返回指针的函数.c` - 返回指针函数
|
||||
- `静态本地变量.c` - 静态局部变量
|
||||
|
||||
### 第10章 - 文件操作
|
||||
- `二进制文件.c` - 二进制文件操作
|
||||
- `文件输入输出.c` - **文件I/O** 📝
|
||||
> **学习笔记**:系统介绍了C语言文件操作的标准方法
|
||||
> - 核心函数:FILE* fopen()用于打开文件,fclose()用于关闭文件
|
||||
> - 文件读写:fscanf()和fprintf()用于格式化文件读写
|
||||
> - 标准代码模式:先检查文件是否成功打开,再进行操作,最后关闭文件
|
||||
> - 错误处理:使用if(fp)检查文件打开是否成功,失败时给出提示
|
||||
- `格式化输入输出.c` - 格式化I/O
|
||||
|
||||
### 第11章 - 位运算
|
||||
- `位段.c` - 位段操作
|
||||
- `位运算的例子.c` - 位运算示例
|
||||
- `按位运算.c` - 按位运算
|
||||
- `移位运算.c` - 移位运算
|
||||
|
||||
### 第12章 - 可变数组
|
||||
- `可变数组.c` - 可变数组基础
|
||||
- `可变数组的数据访问.c` - 数据访问
|
||||
- `可变数组的缺陷.c` - 缺陷分析
|
||||
- `可变数组的自动增长.c` - 自动增长机制
|
||||
|
||||
### 第13章 - 链表
|
||||
- `链表.c` - 链表基础
|
||||
- `链表的函数.c` - 链表函数
|
||||
- `链表的删除.c` - 链表删除操作
|
||||
- `链表的搜索.c` - 链表搜索
|
||||
- `链表的清除.c` - 链表清理
|
||||
|
||||
## 学习建议
|
||||
|
||||
### 学习路径
|
||||
|
||||
1. **按章节顺序学习**:建议按照1-13章的顺序逐步学习,每章的知识点都有递进关系
|
||||
- 第1-3章:打好基础,理解C语言的基本语法和数据类型
|
||||
- 第4-5章:掌握函数和数组,这是编程的核心概念
|
||||
- 第6-7章:深入理解指针和字符串,C语言的精髓所在
|
||||
- 第8-9章:学习结构体和高级特性,提升编程能力
|
||||
- 第10-13章:掌握文件操作、位运算和动态数据结构
|
||||
|
||||
2. **动手实践**:每个代码文件都可以独立编译运行,建议亲自编译执行理解代码逻辑
|
||||
- 不要只看代码,一定要亲自编译运行
|
||||
- 尝试修改代码中的参数,观察运行结果的变化
|
||||
- 在代码中添加printf语句,跟踪程序执行流程
|
||||
|
||||
3. **对比学习**:同一知识点的多个实现版本可以对比学习,理解不同的实现思路
|
||||
- 比如阶乘的三种实现方式,体会递归与循环的区别
|
||||
- 素数判断的多种算法,理解算法优化的思路
|
||||
- 最大公约数的不同算法,感受数学与编程的结合
|
||||
|
||||
4. **扩展练习**:在理解基础代码的基础上,可以尝试修改和扩展功能
|
||||
- 为程序添加输入验证和错误处理
|
||||
- 优化算法的时间复杂度和空间复杂度
|
||||
- 结合多个知识点创建综合性项目
|
||||
|
||||
### 个人学习感想
|
||||
|
||||
通过学习翁凯老师的C语言课程,我深刻体会到:
|
||||
|
||||
- **循序渐进的重要性**:C语言的学习不能急于求成,每个概念都需要充分理解和练习
|
||||
- **实践出真知**:光看代码是不够的,必须亲自动手编写和调试程序
|
||||
- **基础决定高度**:指针、数组、函数这些基础概念掌握得越扎实,后续学习越轻松
|
||||
- **思维方式的转变**:从面向过程的思维到结构化编程思维的转变是关键
|
||||
- **调试能力的培养**:学会使用调试工具和技巧,这是程序员必备的技能
|
||||
- **📝 笔记记录的价值**:在学习过程中认真记录笔记,将抽象概念用自己的话重新表述,这个过程极大地加深了对知识点的理解。每当回顾这些笔记时,都能快速回忆起当时的学习状态和理解程度
|
||||
- **💡 知识体系的构建**:通过在代码中添加详细注释和概念解释,逐步构建起了完整的C语言知识体系,这些笔记不仅帮助当时的学习,更成为了日后复习和深化的宝贵资源
|
||||
|
||||
### 推荐学习资源
|
||||
|
||||
#### 翁凯老师网课链接
|
||||
- **中国大学MOOC平台**:[程序设计入门——C语言](https://www.icourse163.org/course/ZJU-199001)
|
||||
- **翁凯老师个人主页**:[浙江大学计算机学院](https://person.zju.edu.cn/wengkai)
|
||||
- **课程配套资料**:建议结合视频课程和本代码库一起学习
|
||||
|
||||
#### 学习工具推荐
|
||||
- **编译器**:推荐使用GCC或Visual Studio Code + C/C++扩展
|
||||
- **调试工具**:GDB调试器,VS Code内置调试功能
|
||||
- **在线编程**:[C语言网](https://www.dotcpp.com/)、[牛客网](https://www.nowcoder.com/)
|
||||
|
||||
### 学习时间安排建议
|
||||
|
||||
- **初学者**:建议每天1-2小时,完整学完需要2-3个月
|
||||
- **有编程基础**:可以加快进度,重点关注C语言特有的概念如指针
|
||||
- **复习巩固**:定期回顾之前的章节,温故而知新
|
||||
|
||||
### 常见问题解答
|
||||
|
||||
1. **Q: 指针太难理解怎么办?**
|
||||
A: 多画内存图,理解地址和值的关系,从简单的例子开始
|
||||
|
||||
2. **Q: 程序编译出错怎么办?**
|
||||
A: 仔细阅读错误信息,检查语法错误,注意分号、括号匹配
|
||||
|
||||
3. **Q: 如何提高编程能力?**
|
||||
A: 多练习,多思考,尝试解决实际问题,参与编程竞赛
|
||||
|
||||
## 编译运行
|
||||
|
||||
```bash
|
||||
# 编译单个文件
|
||||
gcc filename.c -o output
|
||||
|
||||
# 运行程序
|
||||
./output
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 部分代码可能需要在特定的编译器环境下运行
|
||||
- 建议使用GCC编译器进行编译
|
||||
- 注意中文编码问题,建议使用UTF-8编码
|
||||
Reference in New Issue
Block a user