线性表
类型定义
简言之,一个线性表是n个数据元素的有限序列。
在复杂的线性表中,一个数据元素可由若干个数据项(item)组成。在这种情况下,常把数据元素称为记录(record),含有大量记录的线性表又称为文件(file)。
|
|
例2.1 LA和LB中的数据元素按值非递减有序排列,要求将LA和LB归并为新的线性表LC,且LC中的数据元素仍然按值非递减有序排列。
|
|
线性表的顺序表示和实现
线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素。
一般来说,线性表的第$i$个数据元素$a_j$的存储位置为 $LOC(a_i) = LOC(a_1)+(i-1) \times l$
线性表的这种机内表示称作线性表的顺序存储结构或顺序映像(sequential mapping)。
C语言中可用动态分配的一维数组:
|
|
线性表插入和删除操作:

一般情况下,把第$i(1\le i\le n)$个元素之前插入一个元素时,需要将第$n$至第$i$(共$n-i+1$)个元素向后移动一个位置。
|
|
线性表删除操作
|
|
案例
|
|
线性表的顺序存储结构特点:逻辑关系上相邻的两个单元在物理位置上也相邻。缺点:在作插入或删除操作时,需要移动大量元素。
线性表的链式表现和实现
线性表链式存储结构特点:用一组任意的存储单元(连续或不连续)存储线性表的数据元素 。
如何表示数据元素$a_i$与其直接后继数据元素$a_{i+1}$之间关系:结点{本身信息+直接后继的存储位置}
结点包含两个域:数据域+指针域 n个结点链结成一个链表。

线性单链表:(ZHAO, QIAN, SUN, LI, ZHOU, WU, ZHENG, WANG)

|
|
$p->data = a_i$, 则$p->next->data = a_{i+1}$。
GetElem在单链表中的实现
|
|
单链表插入操作
|
|
单链表删除操作
|
|
两个有序链表合并为一个有序链表
|
|
双向链表:结点有两个指针域,其一指向直接后继,另一指向直接前趋
|
|

结构特性:$d->next->prior = d->prior->next = d$>
双向链表插入操作
|
|
双向链表删除操作
|
|