几个线性表的例子
[color=Green]例2-1 假设有两个集合A和B分别用两个线性表LA和LB表示(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B。
上述问题可演绎为,要求对线性表作如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。
1.从线性表LB中依次取得每个数据元素; GetElem(LB, i)→e
2.依值在线性表LA中进行查访; LocateElem(LA, e, equal( ))
3.若不存在,则插入之。 ListInsert(LA, n+1, e)
void union(List &La, List Lb) {
// 将所有在线性表Lb中但不在La中的数据元素插入到La中
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( )) ListInsert(La, ++La_len1, e); // La中不存在和 e 相同的数据元素,则插入之 } } // union [color=Green]例2-2 已知一个非纯集合B,试构造一个纯集合A,使A中只包含B中所有值各不相同的数据元素。
void purge(List &La, List Lb) {
// 已知线性表Lb中的数据元素依值非递减有序排列(Lb是有序表),
// 构造线性表La,使其只包含Lb中所有值不相同的数据元素
InitList(LA);
La_len = ListLength(La);
Lb_len =ListLength(Lb); // 求线性表的长度
for (i = 1; i <= Lb_len; i++) { GetElem(Lb, i, e); // 取Lb中第i个数据元素赋给e if(!equal (en, e)) { ListInsert(La, ++La_len, e); en = e; } // La中不存在和 e 相同的数据元素,则插入之 } } // purge [color=Green]例2-3 归并两个“其数据元素按值非递减有序排列的”线性表LA和LB,求得线性表LC也具有同样特性
设 La = (a1, …, ai, …, an)
Lb = (b1, …, bj, …, bm)
Lc = (c1, …, ck, …, cm+n)
则 Ck = k = 1, 2, …, m+n
1.分别从LA和LB中取得当前元素ai和bj;
2.若ai≤bj,则将ai插入到LC中,否则将bj插入到LC中。
void MergeList(List La, List Lb, List &Lc) {
// 已知线性表La和Lb中的元素按值非递减排列。
// 归并La和Lb得到新的线性表Lc,
// Lc的元素也按值非递减排列。
InitList(Lc);
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) { GetElem(La, i++, ai); ListInsert(Lc, ++k, ai); } while (j <= Lb_len) { GetElem(Lb, j++, bj); ListInsert(Lc, ++k, bj); } } // merge_list
- 服务器和有线路由器的辐射到底严不严重?
- 学习资源