数据结构基础
1.什么是数据结构
数据结构:用来组织和存储数据
程序设计 = 数据结构 + 算法;
2.数据与数据之间的关系
(1)逻辑结构(数据元素与元素之间的关系)
集合:元素与元素之间是一种平等的集合关系;
线性结构:数据元素与元素之间存在一对一的关系(一一对应);
树形结构:元素与元素之间存在一对多的关系(重点:二叉树);
图形结构:元素与元素之间存在多对多的关系(网状结构,如下图);
补充:在内存中一般以线性存储,即为线性存储结构;
(2)物理结构(数据元素在计算机内存中的存储方式)
顺序存储:在内存中选用一段连续的内存空间进行存储(例如数组);
1.数据查找方便,查找效率高于链式存储(O(1));
2.插入与删除数据时需要移动大量数据;
3.使用时需要预内存分配(例如数组需要提前确定元素个数与长度,避免越界访问);
链式存储:可以在内存中选用一段非连续的内存空间进行存储;
1.数据访问时必须从头遍历(O(n));
2.插入和删除元素方便;
3.不需要预内存分配,是一种动态存储的方式;
索引结构:将要存储的数据的关键字和存储位置之间构建一个索引表;
散列结构(哈希结构):将数据存储位置与数据元素之间的关键字建立起联系,利用元素的关键字去查找;
补:
内存碎片:
内内存碎片:(例如结构体存储时,为了对齐内存而浪费的空间)操作系统中一些较小空间被占用,无法继续分配;
外内存碎片:定义数组时(申请较大空间),各个空间之间的内存间隙,无法被再次利用;
3.单向链表
由结点和链表属性组成
结点:数据域:存放数据;
指针域:存放指针;
链表属性:phead:保存第一个结点的地址,clen保存结点的个数;
data pnexd
phead clen
链表行为:
1.创建链表对象;
2.插入、删除、查找、修改数据;
3.销毁链表;注意,当释放空间后一定要让其指针=NULL避免野指针:
插入链表:
1.申请结点;
2.节点初始化;
3.插入节点;
4.链表元素加1;