- 定义:我们如何把现实中大量而复杂的问题以特定的数据类型(个体)和特定的存储结构(个体之间的关系)保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素、删除某个元素,对所有元素进行排序)而执行的响应操作,这个相应的操作也叫算法
- 数据结构 = 个体 + 个体的关系
- 算法 = 对存储数据的操作
- 算法:解题的方法和步骤
- 衡量算法的标准
- 事件复杂度
- 大概程序要执行的次数,而非执行的时间
- 事件复杂度
- 衡量算法的标准
空间复杂度
算法执行过程中大概所占用的最大内存
难易程度
健壮性
数据结构的地位
数据结构是软件中最核心的课程
程序 = 数据的存储 + 数据的操作 + 可以被计算机执行的语言
预备知识:
指针
指针的重要性:C语言的灵魂
定义:
地址
内存单元的编号
从0开始的非负整数
范围:0 ---FFFFFFFF(0--4G-1) (地址线 控制线 数据线 cpu通过地址线找内存地址,控制线表示读写,只读,只写,数据线数据传输 0---4G-1 32位只能控制4G-1个内存单元)
指针就是地址,地址就是指针
指针变量是存放内存单元地址的变量
指针的本质是一个操作受限的非负整数
分类:
1、基本类型的指针
int i = 10;
int *p = &i; //等价于 int *p; p = &i;
详解这两部分操作:
1、P存放了i的地址,所有我们说p指向了i。
2、P和i是完全不同的两个变量,修改其中的任意一个变量,其他不受影响。
3、p指向i,*P就是i变量本身,更形象说所有出现*p的地址的地方都可以换成i。
2、指针和数组的关系
一维数组名是个指针常量
它存放的是一维数组第一个元素的地址,
他的值不能被改变
一维数组名指向的是数组的第一个元素
下标和指针的关系 a【i】 《==》 *(a + i)
结构体
动态内存的分配和释放