01_什么是数据结构以及C语言指针回顾
一、数据结构是什么
- 如何把现实中大量而复杂的问题,以特定的数据类型和特定的数据存储结构保存到计算机的存储器中。
- 数据存储包括两方面:个体存储的集合、个体与个体之间的关系的存储
- 程序 = 算法 + 数据结构 --> 针对实际问题选择一个好的数据结构,设计一个好的算法
二、数据结构中各名词解释
数据:表示客观事物的符号,比如98(不同语义下可能是成绩,也可能是体重),数据还包括音乐,图像,视屏等。
数据项:组成数据的基本单位
结点:
三、数据结构的两大分类
线性存储
连续存储
散列存储(链式存储)
非线性存储
四、结构体
什么叫结构体
用户根据自己的需求,自己定义的复合型数据类型。
为什么会出现结构体
为了表示复杂的数据类型,基本数据类型无法满足要求。比如学生。有sid(学号)、name、age...。基本的数据类型无法表达
怎么使用结构体
1 struct Student{ 2 int sid;//学生的学号 3 int age;//学生的年龄 4 char name[200];//学生的姓名 5 }; 6 7 struct Student st = {100,"zhangsan",30} 8 9 struct Student st; 10 st.sid = 100; 11 st.age = 30; 12 strcpy(st.name,"zhangsan"); 13 14 stuct Student *pst; 15 pst = &st; 16 pst->sid = 199; 17 pst->age = 30; 18 strcpy(pst->name,"zhangsan");
结构体注意事项:
- 结构体能相互赋值,但不能加减乘除运算
- 普通结构体和结构体指针变量 作为函数传递参数问题
五、动态内存分配
动态的分配 : 可以手工分配内存大小,在不使用的情况下,可以手动释放所占用的内存
静态内存分配:程序运行结束,才会释放所占用的内存、不能动态的增加或减少,直至程序运行结束
1 动态内存分配:int *pArr = (int*)malloc(sizeof(int) * len); 2 静态内存分配: int arr[5] = {0,1,2,3,4};
六、指针
在五、动态内存分配中,定义了一个指向整型变量的指针pArr。那么pArr和arr有什么联系呢?
- 内存大小:pArr = 4 => arr[0] = 4; 都是占用4个字节,因为数组名保存的是数组首元素的地址
- 指向:pArr 指向内存块的首地址,相当于arr[0]
- pArr + 1 => arr[1] 表示第二块内存地址
- *(pArr + 1)// = 1 <= a[1] 表示 第二块内存的内容
七、跨函数使用内存
一句话搞定:使用molloc分配空间可以跨函数使用内存
八、Typedef
为已有的数据类型起个别名
typedef int zhangsan; zhangsan i == int i (1) typedef struct Student { int sid; char name[100]; char sex; }ST; stuct Student st == ST st (2) typedef struct Student { int sid; char name[100]; char sex; }* PST; struct Student *pst; PST pst; (3) typedef struct Student { int sid; char name[100]; char sex; }* PST,ST; ST 代表了 struct Student PST 代表了 struct Student*