【C1】数据结构实现基础
啦啦啦,澜子又要开始瞎鼓捣啦。最近觉得数据结构好有意思,所以想要整理一个系列,方便自己后续复习,也可以便利大噶。虽然很菜,一直不停滴在写BUG(划重点),就是那种 只有你想不到的BUG,没有我写不出的BUG(心累脸) 。可能写得有点乱七八糟,但是还是想要整理整理,还是那句话,不对的地方一定告诉我,一起改进,然后也很希望能和大噶共同分享啦。
后续系列博客都是基于陈越老师主编的《数据结构》一书。本篇博客的主要内容有:
- 数据结构的基本介绍
- 基本C/C++语法
- 简单的应用实例:求无序数组中位数的两种实现
引子
抽象出针对基本统计要求的数据类型
- 类型名称
- 数据对象集
- 操作集
数据存储基础
数组
- 一维数组定义
- 类型名 数组名[数组长度]
- 一维数组引用
- 数组名[下标]
- 数组初始化
- 类型名 数组名[数组长度] = {初值表}
- 二维数组定义
- 类型名 数组名[行长度][列长度]
- 二维数组应用
- 数组名[行下标][列下标]
指针
- 指针定义
- 类型名 *指针变量名
- 指针用于存放变量的地址,定义指针变量时,需注意
- 给出指针变量名
- 说明指针变量所指向的内存空间存放的数据类型
- 指针变量应该先赋值,后使用
- 指针的基本使用
- 指针的基本运算
- 指针与数组
- 用指针实现内存动态分配
- P.S: 动态存储分配函数—
void *malloc(unsigned size):
在内存的动态存储区中分配一连续空间,其长度为size,若申请成功,则返回一个指向所分配内存空间的内存其实地址;若申请内存空间不成功,则返回NULL(值为0)
。该函数的返回值为(void *)类型
,在具体使用中,需要将 **malloc的返回值转换到特定指针类型,并赋给一个指针变量
结构
- 结构定义的一般形式
struct 结构名
{
类型名 结构成员名1;
类型名 结构成员名2;
...
类型名 结构成员名n;
};
- 定义结构体变量的方式:先定义一个结构类型,再定义一个具有这种结构类型的嵌套
- struct 结构名 结构变量名表;
- 结构变量的使用
- 结构变量名.结构成员名
- 结构指针
- `(* 结构指针变量名).结构成员名
- 结构指针变量名->结构成员名
链表[详见陈越老师《数据结构》第二章C2]
链表是一种常见而重要的基础数据结构,其不按照线性顺序存储数据,而是由若干个同一结构类型的结点一次串接而成。主要掌握链表的建立,插入,删除,遍历。
- 单向链表
- 双向链表
- 循环链表
类型定义—typedef
利用typedef来建立基本数据类型的别名可使程序具有更好的可读性和移植性
- 定义形式
- typedef 原有类型名 新类型名
流程控制基础
分支控制
- if else
- switch
循环控制
- for语句
- while语句
- do while语句