线性表的链式存储结构
链式存储结构的定义
1.概念定义:
- n个结点离散分配
- 彼此通过指针相连
- 每个结点只有一个前驱结点和一个后继结点
- 首结点没有前驱结点,尾结点没有后继结点
2.专业术语
-首结点:第一个有有效数据的结点
-尾结点:最后一个有有效数据的结点
-头结点:第一个有效结点之前的那个结点,头结点并不存放有效数据,加头结点的目的主要是为了方便对链表的操作,头结点的数据类型和首结点的类型一致
-头指针:指向头结点的指针变量
-尾指针:指向尾结点的指针变量
3.确定一个链表需要几个参数(也就是获得链表的所有信息)
只需要 头指针 这个参数,因为我们通过头指针可以推算出链表的其他所有信息
PS:free(p) p是一个指针域,就是释放p所指向的结点所占的内存,而不是释放他本身所占的内存
4.分类
1.单链表
2.双链表:每一个结点有两个指针域
3.循环链表:能通过任何一个结点找到其他所有的结点
4.非循环链表
5.算法
1.遍历
2.查找
3.清空
4.销毁
5.求长度
6.排序
7.删除节点
8.插入节点
6.算法
狭义的算法是以数据的存储方式密切相关的,广义的算法是与数据的存储方式无关
泛型:利用某种技术达到的效果就是:不同的存储方式,执行的操作是一样的。
复习:
数据结构:
侠义:
数据结构是专门研究数据存储的问题
数据的存储包括两方面:个体的存储 + 个体关系的存储
广义:
数据结构既包括数据的存储也包括数据的操作
对存储数据的操作就是算法
算法:
侠义:算法是和数据的存储方式密切相关
广义:算法和数据的存储方式无关
这就是泛型思想
数据的存储结构有几种:
线性:
连续存储(数组)
优点:存取速度很快,
缺点:插入以及删除速度较慢
空间通常有限制
事先必须知道数组的长度
需要大块连续的内存块
离散存储(链表)
优点:空间没有限制
插入以及删除元素速度快
缺点:
存取的速度较慢
线性结构的应用:
栈
队列
非线性:
树
图