#includeusing namespace std; //双指针法 #define InitSize 10 typedef int ElemType; typedef struct { ElemType* data; ElemType length; ElemType MaxSize; }SqList; bool InitList(SqList& L) { L.data = new ElemType[InitSize]; if (L.data == NULL) return false; L.length = 0; L.MaxSize = InitSize; return true; } bool Input(SqList& L,int n) { if (n<1 || n>InitSize) return false; cout << "请输入" << n << "个数据" << endl; for (int i = 0; i < n; i++) { cin>> L.data[i]; } L.length = n; return true; } void Show(SqList& L) { cout << "线性表数据为" << endl; for (int i = 0; i < L.length; i++) { cout << L.data[i] << " "; } cout << endl; } void IncreaList(SqList& L, ElemType len) { ElemType* p = L.data; L.data = new ElemType[InitSize + len]; for (int i = 0; i < L.length; i++) { L.data[i] = p[i]; } L.MaxSize = L.MaxSize + len; delete p; } bool MergeList(SqList& L1, SqList& L2) { SqList L; InitList(L); L.length = L1.length + L2.length; IncreaList(L,L.length); int i = 0, j = 0, k = 0; while (i < L1.length && j < L2.length) { if (L1.data[i] <= L2.data[j]) L.data[k++] = L1.data[i++]; else L.data[k++] = L2.data[j++]; } while (i < L1.length) L.data[k++] = L1.data[i++]; while (j < L2.length) L.data[k++] = L2.data[j++]; L.length = k; Show(L); return true; } int main() { SqList L1, L2; InitList(L1); Input(L1, 4); InitList(L2); Input(L2, 7); Show(L1); Show(L2); MergeList(L1, L2); system("pause"); return 0; }



