文件1: #ifndef DATA_H_INCLUDED #define DATA_H_INCLUDED typedef char* ElemType; typedef struct { ElemType* Name; int Length; } Union; typedef struct { unsigned int *Number; unsigned int Length; }Merge; #endif // DATA_H_INCLUDED 文件2: #ifndef UNION_H_INCLUDED #define UNION_H_INCLUDED #define INIT_SIZE 100 void InitUnion(Union &Class,int Amount) { char name[80]; Class.Length = Amount; Class.Name = (ElemType*)calloc(Amount,sizeof(char*)); for(int i = 0; i < Amount; i++) { gets(name); Class.Name[i] = (char*)malloc(strlen(name) + 1); strcpy(Class.Name[i],name); } } void PrintUnion(Union Class) { for(int i = 0; i < Class.Length; i++) { printf("%s ",Class.Name[i]); if(!((i + 1)%10)) { printf("/n"); } } printf("/n"); } bool LocateElem(char *name,Union Class) { for(int i = 0; i < Class.Length; i++) { if(strcmp(name,Class.Name[i]) == 0) { return false; } } return true; } void ADD(char *name,Union &Class) { Class.Length++; Class.Name = (ElemType*)realloc(Class.Name,Class.Length*sizeof(char*)); Class.Name[Class.Length - 1] = (char*)malloc(strlen(name) + 1); strcpy(Class.Name[Class.Length - 1],name); } void Union_Method(Union Class_1,Union &Class_2) { for(int i = 0; i < Class_1.Length; i++) { if(LocateElem(Class_1.Name[i],Class_2)) { ADD(Class_1.Name[i],Class_2);//插在最后的位置 } } } void Test_Union() { int Amount_1,Amount_2; Union Class_1,Class_2; scanf("%d%d",&Amount_1,&Amount_2); getchar(); InitUnion(Class_1,Amount_1); InitUnion(Class_2,Amount_2); Union_Method(Class_1,Class_2); PrintUnion(Class_2); } #endif // UNION_H_INCLUDED 文件3: #ifndef MERGE_H_INCLUDED #define MERGE_H_INCLUDED void InitMerge(Merge &M) { puts("请输出您要构建的数据的长度:"); scanf("%d",&M.Length); puts("请保证输入的数据按值非递减有序排列."); M.Number = (unsigned int*)calloc(M.Length,sizeof(unsigned int)); for(unsigned int i = 0; i < M.Length; i++) { scanf("%d",&M.Number[i]); } } void Merge_Method(Merge &M) { Merge M_1,M_2; InitMerge(M_1); InitMerge(M_2); M.Length = M_1.Length + M_2.Length; M.Number = (unsigned int*)calloc(M.Length,sizeof(unsigned int)); unsigned int *p = M.Number,*p1 = M_1.Number,*p2 = M_2.Number; unsigned int *p1_Last = p1 + M_1.Length; unsigned int *p2_Last = p2 + M_2.Length; while(p1 < p1_Last && p2 < p2_Last) { if(*p1 < *p2) { *p++ = *p1++; } else { *p++ = *p2++; } } while(p1 < p1_Last) { *p++ = *p1++; } while(p2 < p2_Last) { *p++ = *p2++; } } void PrintMerge(Merge M) { for(unsigned int i = 0; i < M.Length; i++) { printf("%d/n",M.Number[i]); } } void Test_Merge() { Merge M; Merge_Method(M); PrintMerge(M); } #endif // MERGE_H_INCLUDED 主函数部分: #include <stdio.h> #include <stdlib.h> #include <string.h> #include "Data.h" #include "Union.h" #include "Merge.h" int main() { Test_Union(); Test_Merge(); system("PAUSE"); return 0; } 批注:写的有点乱,但也是有亮点的~!