#include "stdio.h" #include "malloc.h" #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct { ElemType* elem; int length; int listsize; }SqList; //顺序表类型定义 int ListLength(SqList L);//返回表L的长度 void ListPrint(SqList L); //1 打印输出表L中的各个元素 Status InitList_Sq(SqList& L); //1 初始化表L为空表,分配空间为100个元素的大小 Status ListEmpty(SqList L);//1 判断表L是否为空 Status GetElem_Sq(SqList L, int i, ElemType& e); //e返回表L中位序为i的元素值 Status ListInsert_Sq(SqList& L, int i, ElemType e); //1 再表L中位序i之前插入元素e Status ListDelete_Sq(SqList& L, int i, ElemType& e);//1 删除L中位序为i的元素,返回再e中 int LocateElem_Sq(SqList L, ElemType e); //1 在顺序线性表L中查找第1个值与e相等的位置。若找到,则返回其在L中的位序,否则返回0。 void MergeList(SqList La, SqList Lb, SqList& Lc);//1 实现有序表La和Lb的合并,返回表Lc void Difference(SqList La, SqList Lb, SqList& Lc); int main()//通过主函数进行测试 { SqList La, Lb, Lc; int n, m, i,mid; ElemType x; InitList_Sq(La); scanf("%d",&n); for (i = 1; i <= n; i++) { scanf("%d",&x); ListInsert_Sq(La, La.length + 1, x); } InitList_Sq(Lb); scanf("%d",&m); for (i = 1; i <= m; i++) { scanf("%d",&x); ListInsert_Sq(Lb, Lb.length + 1, x); }//输入函数的 MergeList (La,Lb,Lc); mid = (1 + Lc.length) / 2; printf("%d",Lc.elem[mid-1]); //打印整张表 return 0; } //利用已经实现的基本操作设计实现void MergeList(SqList La, SqList Lb, SqList &Lc) ;即可 Status InitList_Sq(SqList& L) { L.elem = (ElemType*)malloc(sizeof(ElemType) * LIST_INIT_SIZE); L.length = 0; if (L.elem == NULL) { return ERROR; } else { return OK; } }; //分配空间,初始化为空表。若空间分配成功,返回OK,否则返回ERROR Status ListEmpty(SqList L) { if (L.length == NULL) { return OK; } else { return ERROR; } };//判断顺序表是否为空,如果表空返回OK, 非空返回ERROR Status ListInsert_Sq(SqList& L, int i, ElemType e) { if (i <= 0 || i > L.length + 1) { printf("weixu Error "); return ERROR; } else { for (int j = L.length - 1; j >= i - 1; j--) { L.elem[j + 1] = L.elem[j]; } L.elem[i - 1] = e; L.length++; return OK; } } int LocateElem_Sq(SqList L, ElemType e) { for (int j = 0; j < L.length; j++) if (L.elem[j] == e) return j + 1; return 0; } Status ListDelete_Sq(SqList& L, int i, ElemType& e) { ElemType* p, * q; if (i<1 || i>L.length + 1) { printf("weixu Error "); return ERROR; } else { p = L.elem + i - 1; e = *p; q = L.elem + L.length - 1; for (++p; p <= q; ++p) *(p - 1) = *p; L.length--; return OK; } } void ListPrint(SqList L) //打印输出顺序表的所有元素 { int i; if (ListEmpty(L)) //如果表为空,则输出NULL { printf("NULL"); return; } for (i = 1; i <= L.length; i++) //表非空,依次输出各个元素值,用空格隔开。主要最后一个元素后面没有空格 { if (i == 1) printf("%d", L.elem[i - 1]); else printf(" %d", L.elem[i - 1]); } } void MergeList(SqList La, SqList Lb, SqList& Lc) { int La_len, Lb_len; ElemType x, y; InitList_Sq(Lc); int i = 1; int j = 1; int k = 1; La_len = ListLength(La); Lb_len = ListLength(Lb); while (i <= La_len && j <= Lb_len) { GetElem_Sq(La, i, x); GetElem_Sq(Lb, j, y); if (x <= y) { ListInsert_Sq(Lc, k, x); i++; k++; } else { ListInsert_Sq(Lc, k, y); j++; k++; } } while (i <= La_len) { GetElem_Sq(La, i, x); ListInsert_Sq(Lc, k, x); i++; k++; } while (j <= Lb_len) { GetElem_Sq(Lb, j, y); ListInsert_Sq(Lc, k, y); j++; k++; } return; } int ListLength(SqList L) { return L.length; } Status GetElem_Sq(SqList L, int i, ElemType& e) { if (i <= 0 || i >= L.length + 1) { printf("weixu Error "); return ERROR; } else { e = L.elem[i - 1]; return OK; } } void Difference(SqList La, SqList Lb, SqList& Lc) { int i = 1, k = 1; int la_len; ElemType x; la_len = ListLength(La); InitList_Sq(Lc); while (i<=la_len) { GetElem_Sq(La, i, x); if (LocateElem_Sq(Lb,x)==0) { ListInsert_Sq(Lc, k, x); k++; } i++; } }