順序付きテーブルのマージ
9239 ワード
順序付きテーブルのマージ
これは、整数を例として、単純な非減算順序配列です.
これは、整数を例として、単純な非減算順序配列です.
1 #include
2 #include
3
4 typedef int Elem;
5
6 typedef struct
7 {
8 Elem *elem;
9 int len;
10 }List;
11
12 void createList(List &L); //
13 void traverse(List L); //
14 void mergeList(List La,List Lb,List &Lc);//
15
16 int main()
17 {
18 List La,Lb,Lc;
19
20 createList(La); // La
21 createList(Lb); // Lb
22
23 traverse(La); //
24 traverse(Lb); //
25
26 mergeList(La,Lb,Lc);//
27
28 traverse(Lc); // Lc
29
30 return 0;
31 }
32
33 void createList(List &L)
34 {
35 printf("input the length:
"); //
36 scanf("%d",&L.len);
37
38 L.elem = (Elem*)malloc(sizeof(Elem)*L.len); //
39
40 for(int i=0;i)
41 {
42 printf("input the %d data:
",i);
43 scanf("%d",&L.elem[i]); // ,
44 }
45
46 }
47
48 void traverse(List L)
49 {
50 for(int i=0;i)
51 {
52 printf("%d ",L.elem[i]); //
53 }
54 printf("
");
55 }
56
57 void mergeList(List La,List Lb,List &Lc)
58 {
59 Lc.len = La.len + Lb.len; // Lc ;
60 Lc.elem = (Elem *)malloc(sizeof(Elem)*Lc.len); // Lc ;
61
62 int *pa = La.elem; // pa,pb ;
63 int *pb = Lb.elem;
64 int *pc = Lc.elem; //pc ;
65
66 int *pa_last = La.elem+La.len-1; // pa_last,pb_last
67 int *pb_last = Lb.elem+Lb.len-1;
68
69 while((pa<=pa_last)&&(pb<=pb_last)) //La,Lb
70 {
71 if(*pa<=*pb) *pc++ = *pa++; // *pa = *pc;pc++;pa++; Lc ;
72 else *pc++ = *pb++;
73 }
74
75 while(pa<=pa_last) *pc++ = *pa++; //Lb , La Lc ;
76 while(pb<=pb_last) *pc++ = *pb++; //
77
78 }