一 软件演示
二 若干问题
为了简化代码,突出数据结构知识重点,项目中的如顺序表的初始大小等都是用宏定义的,没有让用户从键盘输入。
国内数据结构教材 《数据结构》、《数据结构算法解析》 中,代码里
&
符号的问题,教材中是 C++ 的用法,并非纯 C 语言,我自己的项目用的是纯 C 语言,所以代码在此问题上会有所不同。参考博文:C++ 中的&:“&引用” 和“&取地址符”的区别和作用、C语言中取地址符&做函数形参?。我自己的项目代码中与教材 《数据结构》、《数据结构算法解析》的代码在宏名、变量名等上面会不同。
关于结构体指针:
结构体变量的地址作为实参,传递到函数(形参为指针变量)。此时在函数内引用结构体变量的成员,直接写成w->name
相当于(*w).name
(指针的解引用)。参考博文:结构体的初始化和引用及指向结构体变量的指针变量(C语言)。访问结构体成员方法:点
.
是用于结构体变量访问成员,箭头->
是用于结构体指针访问成员。->
从外部看是包含了一个解指针。菜单部分代码参考:C语言实现顺序表的创建与增删改查操作
C 语言中,传参数给函数有两种方式:按值调用(实参为变量名,形参为变量名。/ 是传一个副本给函数)、按地址调用(实参为地址,形参为指针变量。/ 函数通过指针解引用访问原本变量)。
三 版本控制最佳实践与问题
参考:
1、 A successful Git branching model
2、 Git飞行规则(Flight Rules)
四 开发环境
- OS:Windows 10
- IDE:Eclipse Cpp 2018-09
- Compiler:GNU GCC v6.3.0
五 软件项目结构
软件项目结构:
(截图为项目未完成的状态。)项目(目录)结构解析:
参考博文:《软件工程 C 实践二 课程总结笔记》
core 文件夹中,main.c 为整个项目的主程序。/ main.h 为主函数的函数声明(子模块会用到);config.h 为整个程序会用到的基本数据等。
除 core 文件夹外,每个文件夹和其中与之同名的 c 文件,是一个模块(或子模块)。
除 core 文件夹外,每个文件夹和其中与之同名的 c 文件中的同名函数作为这个模块的主函数(也是向外提供 API 的函数)。/ 补充: modules 文件夹中的每个 c 文件都为一个子模块,一个 .h 头文件统一向外提供 API 接口(其头文件还可能包含各个子模块可能会用到的宏定义等)。
除 core 文件夹外,每个 .h 头文件即为接口文件,向外提供接口,供其它模块、函数调用。
每个 c 文件,包含自己的头文件、自己程序所要用到的 API 的头文件。
- 文件结构:
- 版权等信息
- #ifndef、#define
- 包含的头文件
- 宏定义
- 结构体定义
- 变量定义
- 函数声明