线性表的逻辑结构
1.线性表的定义
线性表是具有相同类型的n(>=0)个数据元素的有限序列。
2.线性表的顺序表示
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。(也称顺序存储结构或顺序映像)
通常:称这种存储结构的线性表为顺序表。高级程序语言中,一般用数组来类比顺序表。
3.顺序表中基本操作的实现
顺序表的插入:因为是顺序存储,新插入的数据占位,那么插入数据后面的数据都要向后移动一位。
顺序表的删除,同样,新删除的数据不占位,那么删除数据后面的数据都要向前移动一位。
4.顺序表的优缺点
位置固定,查找快。缺点:操作过程复杂,容易浪费空间。
5.线性表的链式表示(链表)
链式表示不要求存储单元的连续性,但是为了确保查找方便,需要在原有的数据结构增加一个域用来存储后一个元素的位置。这两部分信息组成数据元素的存储映像,称为结点(node)。存储数据元素信息的域称为数据域,存储直接后继存储位置的域称为指针域。指针域中存储的信息称为指针或链。n个节点链接成一个链表,即为线性表的链式存储结构,又由于每个结点中只包含一个指针域,故又称为线性链表或单链表。
6.单链表的结构
一般情况下,为了处理方便,在单链表的第一个结点之前附设一个结点,称之为头结点。头结点的数据域可以不存储任何信息,也可以存储长度等类似的附加信息,头结点的指针域指向第一个节点的指针(即第一个元素节点的存储位置),若线性表为空表,则头结点的指针域为空。(单链表要取得数据元素,必须从头指针出发顺链寻找,因此其操作不同于顺序表)
7.单链表的基本操作
查找:只能从链表的第一个结点出发,顺着链域next逐个结点查找。插入:将c插入到ab之间时。找到a结点,生成c的数据域和指针域,c指针域指向b。将a的指针域指向c。可得a指向c指向b。删除:删除c结点时,先找到a结点,将a的指针域指向b,释放c的空间。
8.循环链表
表中最后一个结点的指针域指向头结点,整个链表形成一个环。
9.双向链表
双向链表新增一个指针域用于指向前驱,这样就有同时2个指针域来表示位置,可以正着查也可以反着查。具体下篇文章再详细介绍。