数据结构与算法
数据结构就是个体的存储和个体的关系存储
算法就是对存储数据的操作
衡量算法标准
1.时间复杂度
2.空间复杂度
还可以有很多,难易程度,健壮性…..
指针
指针是c语言的灵魂,最终指向一个地址,(地址就是指针)
其值就是内存单元的编号(指针变量),指针的本质是一个操作受限的非负整数
int i = 10;
int *p = &i;
//等价于 int *p; p = &i;
指针变量也是一个变量,只不过它存放的不是内存单元中的内容,只能存放内存单元的地址
数组中的指针
int a[5] = {1,2,3,4,5};
printf("%p\n",*(a+3));
// a表示一个地址,a+3表示a后面的第三个内存地址,*(a+3)表示这个地址的值
//这里数字增加1时一定指向下一个元素,其内部原理是:[a地址+3*a所占字节数]
printf("%p\n",*a+3); // *a+3 等价于 a[0]+3 ,
printf("%p\n",a[3]);
printf("%p\n",3[a]);
//一维数组名是一个指针常量,存放的是一维数组第一个元素的地址
//a[i] <==> *(a+1) <==> 3[a] 偏移地址
访问数组只要知道数组的第一个元素的地址,知道这个数组的长度既可达到需求
函数中的指针
包含在函数中通过指针赋值的方法,来切换具体的值
结构体
为了表示一些复杂的数据,普通的基本类型无法满足需求,是用户根据需要自己定义的数据类型,相应的,类也属于一种数据结构,
类比于java或者C++中的类,
class Student{
int sid;
String name;
int age;
String gender;
void delStudent(){
//方法
}
}
//这个就是java中的类,在类中可以包含方法
结构体
struct Student
{
int sid;
String name;
int age;
String gender;
};
//这个是C中的机构体,class换成struct,其中不包含方法,只有属性(结构体的功能较弱)
使用结构体有两种方式:
struct Student st = {1, "bigash", 20};
struct Student *pst = &st;
st.sid = 99; //第一种方式
pst->sid = 99; //第二种方式
结构体变量不能加减乘除,但可以相互赋值
内存
C语言的执行并不存在自动释放内存这一说,
操作系统回收内存后,也不会对内存空间中遗留的数据进行清理,所以有的时候会遇到赋值的内存中有垃圾数字存在,这也体现了初始化的重要性!
对于内存的调用,C语言中采用的是malloc动态分配,跨越函数调用的时候需要格外注意
最终的代码存放在Github仓库 Review部分