1 ================
2 线性表及其基本运算:
3 1。线性表(linear_list),n个数据元素的有限序列,记为:L=(a1, a2, ..., an)。
4 定义:linear_list=(D,R)
5 D={ai|ai ∈ D0, i=1,2,...,n, n>=0} D0表示相同的数据对象。
6 R={N}, N={<a(i-1), ai>|a(i-1),ai∈D0, i=1,2,3,...,n}
7
8 2.基本运算
9 void initiate(L) 初始化操作
10 int length(L) 求长度
11 elm get(L, i) 若i∈[1,n]返回一个第i个数据元素,i叫L的位序。
12 elm prior(L, elm) 求前驱
13 elm next(L, elm) 求后继
14 int locate(L, x) 返回0,或第一次出现的位序。
15 void inserte(L, i, b) 前插操作i∈[1,n+1]
16 void delete(L, i) 删除操作i∈[1,n]
17 beloon empty(L) 判空操作
18 void clear(L) 置空表操作
19
20 3.例子
21 (1)求两个集合的并,即A=A∪B
22 I.依次从Lb中取出数据d。
23 II.判度d在La中是否存在。
24 III.若不存在,则插入到La中。
25
26 //归并两个集合La, Lb
27 linear_list A∪B(linear_list La, linear_list Lb){
28 int elm_b, loc;
29 int n = length(La);
30 //在Lb中取数据,插入到La中。
31 for(int k = 0; k < length(Lb); ++k){
32 elm_b = get(Lb, k);
33 loc = locate(La, elm_b);
34 //判断loc在La中是否存在
35 if(loc = -1){
36 insert(La, n+1, elm_b);
37 }
38 ++n;
39 }
40 return La;
41 }
42
43
44 //归并两个有序线性表(不含有相同元素)
45 I.安顺序分别取La,Lb中的元素得到较小的插入Lc,La指针后移,Lb指针不动,再次
46 比较,这样反复进行插入。如果比较两个值相等,同时移动两个指针。直到某一个
47 表结束。
48 II.
49 III.
50 IV.
51 liear_list AUB(liear_list La, liear_list Lb, liear_list Lc){
52 int a = 0, b = 0, c = -1;
53 //取La|Lb中的元素插入到Lc中
54 while(a < length(La) && b < length(Lb)){
55 if(get(La, a) < get(Lb, b)){
56 insert(Lc, c+1, get(La, a));
57 a++;
58 c++;
59 }else if(get(La, a) == get(Lb, b)){
60 insert(Lc, c+1, get(La, a));
61 a++;
62 b++;
63 c++;
64 }else{
65 insert(Lc, c+1, get(Lb, b));
66 c++;
67 b++;
68 }
69 }
70 while(a < length(La)){
71 insert(Lc, c+1, get(La, a));
72 c++;
73 a++;
74 }
75 while(b < length(Lb)){
76 insert(Lc, c+1, get(Lb, b));
77 c++;
78 b++;
79 }
80 return Lc;
81 }
82 /*算法分析:语句频度:length(La)+length(Lb)-相同元素的个数
83 *时间复杂度:O(length(La)+length(Lb))
84 *
85 */
86