线性表:其实就是零个或多个数据元素的有限序列
线性表当中元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继,其结构如下所示
我们把线性表元素的个数n(n>=0)定义为线性表的长度,当n=0的时候就称为空表
在复杂的线性表当中会有很多个数据元素,一个数据元素可以由若干个数据项组成
关于线性表的抽象数据类型定义如下:
“ADT 线性表(List)
Data
线性表的数据对象集合为{a1, a2, ......, an},每个元素的类型均为DataType。
其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,
除了最后一个元素an外,每一个元素有且只有一个直接后继元素”。
“数据元素之间的关系是一对一的关系。
Operation
InitList(*L): 初始化操作,建立一个空的线性表L。
ListEmpty(L): 若线性表为空,返回true,否则返回false。
ClearList(*L): 将线性表清空。
GetElem(L, i, *e): 将线性表L中的第i个位置元素值返回给e。
LocateElem(L, e): 在线性表L中查找与给定值e相等的元素,
如果查找成功,返回该元素在表中序号表示成功;
ListInsert(*L,i,e): 在线性表L中的第i个位置插入新元素e
ListDelete(*L,i,*e): 删除线性表L中第i个位置元素,并用e作为返回值
ListLength(L): 返回线性表L的元素个数
对于不同的应用,线性表的基本操作是不同的,上述操作是最基本的,我们需要对具体问题具体分析,一般都说都可以通过对上述的定义的操作组合来进行解决
就比如说我要去实现线性表集合A和B的并集操作,就是要使A=AUB,其实就是要把存在集合B当中但是并不存在A中的数据元素插入到A当中,在这里面我们需要去遍历B线性表当中的元素所以需要去调用ListLength函数去获取线性表的长度,获取B线性表当中的第i个元素,需要去用到GetElem函数以及LocateElem函数去查找A线性表当中有没有和我B线性表当中一样的元素了,如果没有最后就去调用ListInsert函数
void union(List *La,List Lb)
{
int La_Len,Lb_Len,i;
ElemType e;//声明与La和Lb相同的数据元素e
La_Len = ListLength(La);//求线性表的长度
Lb_len = ListLength(Lb);
for(i=1;i<=Lb_len;i++)
{
GetElem(Lb,i,e);//取出Lb中第i个数据元素赋值给e
if(!LocateElem(La,e,equal)) //La当中不存在和e相同的数据元素
{
ListInsert(La,++La_len,e); //插入
}
}
}