1 #include <stdio.h>
2 #include <stdlib.h>
3 #define LIST_INIT_SIZE 100
4 #define LISTINCREMENT 10
5
6 typedef struct Sqlist {
7 int *elem;
8 int length;
9 int listsize;
10 }SqList;
11
12 int intlist(SqList L)
13 {
14 L.elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));
15 if(!L.elem) exit(-1);
16 L.length = 0;
17 L.listsize = LIST_INIT_SIZE;
18 return 0;
19 }
20
21 int getelem(SqList L,int i, int e)
22 {
23 if(i > L.length || i < 1) return -1;
24 int *p;
25 p = L.elem + (i - 1);
26 e = *p;
27 return e;
28 }
29
30 int listinsert(SqList L, int i, int e)
31 {
32 int *newbase = NULL;
33 int *q,*p;
34 if(i < 1 || i > L.length + 1) return -1;
35 if(L.length >= L.listsize)
36 {
37 newbase = (int *)realloc(L.elem,(L.listsize + LISTINCREMENT)*sizeof (int));
38 if(!newbase) exit (-1);
39 L.elem = newbase;
40 L.listsize += LISTINCREMENT;
41 }
42 q = &(L.elem[i-1]);
43 for(p = &(L.elem[L.length -1]); p >= q; --p)
44 *(p + 1) = *p;
45 *q = e;
46 ++L.length;
47 return *q;
48 }
49
50 int listlenghth(SqList L)
51 {
52 if(L.length == 0)
53 return -1;
54 else
55 return L.length;
56 }
57 int mergelist(SqList La, SqList Lb, SqList Lc)
58 {
59 intlist(Lc);
60 int i=1,j=1;
61 int k= 0;
62 int ai,bj;
63 int la_len = listlenghth(La);
64 int lb_len = listlenghth(Lb);
65 while((i <= la_len) && (j <= lb_len))
66 {
67 getelem(La,i,ai);
68 getelem(Lb,j,bj);
69 if(ai <= bj)
70 {
71 listinsert(Lc,++k,ai);
72 ++i;
73 }
74 else
75 {
76 listinsert(Lc,++k,bj);
77 ++j;
78 }
79 }
80 while( i <= la_len )
81 {
82 getelem(La,i++,ai);
83 listinsert(Lc,++k,ai);
84 }
85 while( j <= lb_len )
86 {
87 getelem(Lb,j++,bj);
88 listinsert(Lc,++k,bj);
89 }
90 return Lc.length;
91 }