1.1数据结构
程序=数据结构+算法
数据 (Data): 信息的载体,是能够输入到计算机中被计算机识别、处理、存储的符号总称。
数据元素 (Data Element): 数据的基本单位,又称为记录。一般数据元素由若干基本项组成。
数据类型(Data Type):数据元素取值范围与运算的限定。
小结:
数据不再是单纯的数值,而是一个集合:
数据不再是包括整型,浮点类型的数值类型
包括字符,图像、声音等非数值类型的问题
数据是一个集合,是多个数据元素组成,每个数据元素又是多个数据项组成
数据结构主要研究:数据的逻辑结构、存储结构及其操作
1.2存储方式
(1)顺序存储
按照数据元素的逻辑关系在计算机内存中连续存储,内存中开辟连续空间问题
(2)链式存储
数据元素之间的关系通过地址和指针的方式建立,在内存中是不连续的
(3)索引存储(Indexed storage):
通过索引表,地址区链接数据文件,增加查询效率
(4)哈希存储:
通过构建数据元素里面的某个数据项作为key。和存储地址之间建立一个映射关系,通过key能快速找到数据元素。
小结:
顺序存储………………线性表、顺序表(数据元素在内存中连续存储,联系且大小固定)
链式存储结构……………..链表(不连续的内存空间,内存大小固定)
索引存储结构…………….索引表,数据文件
散列存储结构……………..hash表,通过关键字段和地址构建映射关系
1.3 操作
具有逻辑结构的数据元素按照某种存储结构进行存放,计算机能够识别,并进行简单的操作,不是简单的+-*/
1、创建
2、插入
3、删除
4、查找
5、销毁
6、遍历
1.4 顺序表(1对1,顺序存储)
逻辑结构:1对1的线性结构,元素除了首尾,其他元素只有一个前驱和一个后继
存储结构:顺序存储,内存中连续且固定
特点:
顺序并且连续的存储
大小固定,表满不能进行插入,表空不能删除
操作:插入和删除不是很方便,查找方便
1.5定义顺序表
通讯录: 数据元素 联系人 数据项(姓名、电话、家庭住址、公司职称)
超市管理系统:数据元素 商品 数据项(商品名称,生产日期,库存量,上架时间,本月销量)
数据类型:int float char 指针类型 结构体 共用体 枚举
typedef struct goods
{
char name[20];//商品名称
int sale;//销量
char datatime[10];//生产日期
int num;//库存量
}data_type;
typedef struct list
{
data_type arr[N];//N连续空间大小,顺序且连续
int count;//有序数据个数 count == 0 空 count ==N 满
}List
1.1 链表:
带头节点的单项链表:
1、有没有头节点
2、指针域是单项还是双向
单向链表、双向链表
3、尾节点是否指向头节点
循环链表 不循环链表
链表:头删尾插
枚举的大小为:4 从0开始依次增加 : enum op性的
满二叉树:所有中间节点的子节点皆为2
i层节点的个数:2^(i-1)
总共k层:总节点的个数2^k-1
假设子度为0的节点个数n0,子节点数0
假设子度为1的节点个数n1,子节点数n1
假设子度为2的节点个数n2,子节点数2*n2
总节点数=根节点+子节点
n0+n1+n2 = 1+0+n1+n2*2
n0=1+n2
完全二叉树:和满二叉数拥有一样的编号,但是可以从后往前少
空间浪费 |
二插树:
最优二叉树(赫夫曼树):
带权路径最短。
树中所有叶子的带权路径长度: WPL最小=叶子节点×边数
一个的同学成绩,正态分布。60分以下的是少数人,60-70,80-90 。 每个执行次数是不同的; 放到二叉树结构去实现。 选一种二叉树的结构最优,让代码的执行效率最高就行;
赫夫曼编码:
赫夫曼树
算法:
解决问题的步骤:有穷的规则的有序集合
程序=算法+数据结构
特性:
有穷性、确定性、可行性、输入、输出
IPO:
I input输入
P process处理:增删改查
O output输出
查找:顺序查找、分块查找、分块查找
分块查找:
索引表:
Kmax该块中的最大值
序号:起始位置
Hash表的查找:
让查找与数据规模无关,查询时间常数级别
直接地址法:H=a*K+b
保留除数法:H=key%p
开放地址法:冲突了+1
质数取余的方法进行映射,依据key找到地址
如果地址相同:采用开发地址法,线性探查法,二次探查找到解决冲突
Hash:链地址法