順序付きテーブルのマージ

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 }