2.1线性表的类型定义
线性表一种最常用且最简单的数据结构
线性表是一个相当灵活的数据结构,它的长度可根据需要增长或缩短,即对线性表的数据元素
不仅可以进行访问还可以进行插入删除等操作。
抽象数据类型线性表的定义如下:
例2-1假设利用两个线性表LA和LB分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的集合A=AUB。这就要求对线性表作如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插人到线性表LA中去。只要从线性表LB中依次取得每个数据元素,并依值在线性表LA中进行查访,若不存在,则插人之。上述操作过程可用下列算法描述之。(用上面给出的函数进行)
算法2.1
void union(List&La,List Lb){
//将所有在线性表Lb中但不在La中的数据元素插人到La中
La.len = ListLength(La);Lb.len = ListLength(Lb);//求线性表的长度
for(i =1;i<=L_len;i++){
GetElem(Lb,i,e);//取Lb中第i个数据元素赋给e
if(!LocateElem(La,e,equal))
ListInsert(La,++ La.len,e);
//La中不存在和e相同的数据元素,则插人之
}//union
例2-2已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。例如,设LA =(3,5,8,11)
LB =(2,6,8,9,11,15,20)
则
LC =(2,3,5,6,8,8,9,11,11,15,20)
算法2.2
void MergeList(List La,List Lb,List&Lc){
//已知线性表La和Lb中的数据元素按值非递减排列。
//归并La和L得到新的线性表Lc,Lc的数据元素也按值非递减排列。
Initist(Ic);
i=j=1;k =0;
La.len =ListLength(La);Lb.len =ListLength(Lb);
while((i<=La-len)&&(j<=Lb-len)){//La和Lb均非空
GetElem(La,i,ai);GetElem(Lb,j,bj);
if(ai <=bj){
ListInsert(Lc,++k,ai);++i;}
else{
ListInsert(Lc,++k,bj);++j;}
/*在之前两线性表均有元素*/
/*在此之后一个有元素一个无元素*/
while(i<= La.len){
GetElen(La,i++,ai);
ListInsert(Lc,++k,ai);}
while(j<=Lb-len){
GetElen(Lb,j++,bj);
ListInsert(Lc,t+k,bj);}
}//MergeList
注意双指针i和j
返回目录