一、数据结构基础概念
程序=数据结构 + 算法。
数据结构:数据的结构。数据 = 元素之间的关系 = 数据的组织方式。
算法 = 数据元素之间的相互作用的操作(运算)。
- 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别并输入给计算机处理的符号集合。
- 数据对象:性质相同的数据元素的集合。
- 数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。
- 数据项:是数据不可分割的最小单位。

数据结构研究的是数据元素之间的关系。
二、数据结构分为逻辑结构和物理结构
逻辑关系:逻辑上存在一种联系; 物理结构 (关系):存储到计算机中的结构。
**逻辑结构:**数据元素之间无关联的集合。
- 线性结构(特点:除了第一个元素和最后一个元素之外其余元素都只有一个前驱和后继);
- 树:目录层次结构一对多关系;
- 图:地图地点---图的结构多对多关系。
物理结构:指存储方式,如顺序存储(数组)和链式存储(指针)。
计算机本身的存储结构-------线性。 计算机的线性存储空间中表示不同的逻辑机构。
存储结构:
**顺序结构:**用一片连续的内存空间存放数据。对应到 C 语言数组 (单一性,有序性,连续性)----- 数据结构-------顺序表。 特点:访问数据方便 O(1),插入删除不方便 O(n)。
**链式结构:**通过指针指向下一个元素。也可以用来表示一种线性关系彼此联系起来 eg:铁链 特点:访问数据需要遍历 O(n),插入删除方便 O(1)。
**索引结构:**找---【索引表 (有序)】-----数据 eg:查字典,书目录。
**散列(哈希)结构:**找(key)------【散列结构 (无序)】------计算在哪里。

算法 5 个基本特性:输入,输出,有穷性,确定性和可行性。 设计算法:正确性,健壮性,可读性,时间和空间效率。
算法效率的度量:
**时间复杂度(更重要):**时间复杂度用于衡量算法执行时间随输入规模增长的变化趋势。常见的表示方法为大 O 符号(O),描述最坏情况下算法的增长上限。(最好,最坏,平均)
**空间复杂度:**空间复杂度用于衡量算法在运行过程中临时占用存储空间的大小随输入规模增长的变化趋势。同样使用大 O 符号表示。
非原地插入排序 O(n);原地插入排序 O(1);
三、学习数据结构
线性表:顺序表---以顺序结构存储的线性表(数组);链表----以链式结构存储的线性表。
链表:
- 数据元素-----节点 {数据---数据域 联系-----指针域}
- 头节点------数据部分不关心-----只是为了方便操作链表,链表---都是有头链表
- 尾节点的指针域为空 NULL;
代码的实现:创建(增删改查),销毁。 链表:1.创建空列表 2.销毁链表 3.增数据--插入 4.删数据---删除;5.查数据---找值;6.改数据----改值


