线性结构-线性表
数据结构中的逻辑结构分为线性结构和非线性结构,线性结构是n个数据元素的有序(次序)集合,它有下列几个特征:
1.集合中必存在唯一的一个"第一个元素";
2.集合中必存在唯一的一个"最后的元素";
3.除最后元素之外,其它数据元素均有唯一的"后继";
4.除第一元素之外,其它数据元素均有唯一的"前驱"
线性结构中线性表,它是最常用且最简单的一种数据结构。线性表是一个含有n≥0个结点的有限序列,
对于其中的结点,
有且仅有一个开始结点没有前驱但有一个后继结点,
有且仅有一个终端结点没有后继但有一个前驱结点,
其它的结点都有且仅有一个前驱和一个后继结点。
一般地,一个线性表可以表示成一个线性序列:k1,k2,…,kn,其中k1是开始结点,kn是终端结点。
一般线性表包含下列基本操作:
初始化、
销毁、
重置为空表、
判断是否为空、
获取长度、
根据位置获取对应元素、
查找元素、
获取指定元素的前驱和后继元素、
插入元素、
删除元素、
遍历元素。
线性表的顺序表示和实现
线性表的顺序表示指的是用物理上的一段连续的地址来存储数据元素。
如果第一个元素的在内存上的地址为a1,
每个元素占用的空间是l,
那么第n个元素的地址就是a1+(n-1) x l。
只要确定了第一个元素的地址,那么我们可以对线性表中的任一元素随机存取,
由于编程语言中的数组也有随机存取的特点,下面就用数组来描述线性表的顺序存储结构。
线性表的链式表示和实现
线性表的顺序存储结构是逻辑位置和物理位置都相邻, 而链式存储结构是逻辑位置相邻,但物理位置不一定相邻,
相比顺序存储结构,它不能随机存取, 但在插入和删除操作时不需要移动元素, 大大提高了增加和删除元素的效率。
通常链式存储结构会有一个个结点组成,结点中包含两个域
一个是数据域,数据域中存储数据;
一个是指针域,指针域中存储下一个后继元素的地址
这一个个结点组成链表,也称线性链表或单链表。
单链表的逻辑结构:
从头结点开始,指针域依次指向下一个数据的存储地址,尾节点的指针域为NULL
循环链表的逻辑结构:
从头结点开始,指针域依次指向下一个数据的存储地址,尾节点的指针域又指向头结点的地址
双向链表的逻辑结构:
在循环链表的基础上每个节点增加一个指向 前驱地址的指针,形成双向环列表。