1. 程式人生 > >1.1 線性表的邏輯結構:

1.1 線性表的邏輯結構:

例一:有兩個集合A和B分別用兩個線性表La和Lb表示,即:線性表中的資料元素即為集合中的成員;
分析:上述問題演繹為:要求對線性表作如下操作:
擴大線性表La,將存於線性表Lb中而不存與線性表La中的資料元素插入到La中去。


線性集合A和B的合併:


A:把B中的元素加入A中


首先: Len_Lb = ListbLength(Lb);(Len_La = ListLength(La))取得線性表Lb的長度,為下面跳出迴圈設定條件


迴圈遍歷Lb中的元素,利用getElem(Lb,i,e){返回第i個元素的值e} , 將e和La中的元素比較:


若La中的元素無與之相同的,if(!LocateElem(La, e, equal()));則:InsertElem(&La,Len_La++,e);把元素插入La表的集合


迴圈執行Len_Lb次;for(int i = 1; i <= Len_Lb; i++)


void union(List &La, List Lb){
La_len = ListLength(La); //求線性表長度
Lb_len = ListLength(Lb);


for(int i = 1; i <= Lb_len; i++){
GetElem(Lb, i, e); //取Lb第i個數據元素
if(!LocateElem(La, e, equal())) //La中不存在和e相同的資料元素,則插入
ListInsert(&La, ++La_len, e);
}
}


例二:歸併兩個“其資料元素按值非遞減有序排列”的有序表La和Lb,
求得有序表Lc也具有同樣特性
分析:兩個非遞減有序排列表La和Lb,即為:
La: 1, 2, 3, 5, 6
Lb: 2, 3, 4
Lc: 1, 2, 2, 3, 3, 4, 5, 6


基本操作:初始化Lc為空表,分別從La和Lb取得當前元素ai和bj,
若ai<bj,則插入Lc。重複上述操作,直至La或Lb取完;
再將La或Lb中剩餘的元素複製到Lc中


void MergeList(&Lc, La, Lb){
InitList(Lc);//構造空的線性表Lc
La_len = ListLength(La);
Lb_len = ListLength(Lb);
int i = j = 1, k = 0;
while((i <= La_en)&&(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){
GetElem(La, i++, ai);
ListInsert(Lc, ++k, ai);
}
while(j <= Lb_len){
GetElem(Lb, j++, bj);
ListInsert(Lc, ++K, bj);
}
}