线性表应用-有序顺序表归并

来源:互联网 发布:python量化 编辑:程序博客网 时间:2024/04/29 07:09

有序表归并算是顺序表中的一种算法操作,是顺序表其他应用的基础,例如,一元稀疏多项式运算和稀疏矩阵。
有序表归并是指将两个已经排好顺序的顺序表A,B,合在一起组成一个新的有顺序的顺序表C。
这里写图片描述
算法操作可以分为:
1、为新的顺序表listMerge分配内存空间,并初始化C(指定大小等)
2、插入,先比较list1和list2的数据哪个大哪个小,并按照大小顺序逐个插入到listMerge中
3、当list1或list2中所有数据都插入完毕后,剩下另一个list2或list1中还有剩余的数据时,将所有剩余的数据全部插入到listMerge中(其中不用再比较大小,因为list1或list2中剩下的元素一定是排在listMerge最后一个元素后面,且list1或list2中剩下的元素都是有序排列的)

typedef struct {    int length;    int size;    int* listData;}SqList;SqList *listMerge(const SqList* list1, const SqList* list2){    //初始化listMerge    SqList *listMerge = (SqList*)malloc(sizeof(SqList));    int i=0, j=0, k=0,len;    len = list1->length + list2->length;    listMerge->listData = (int*)malloc(len * sizeof(int));    //用i记录遍历list1的位置,用j记录遍历list2的位置,用k记录listMerge的位置    //当i和j都小于list1和list2的长度    while (i < list1->length && j < list2->length)    {        //按照数据大小插入到listMerge中        if (list1->listData[i] < list2->listData[j])        {            listMerge->listData[k++] = list1->listData[i++];        }        else        {            listMerge->listData[k++] = list2->listData[j++];        }    }    //当list1或list2中的表还有剩余元素没插入时,可以全部插入    //这种情况是当list1的长度不等于list2长度时    while (i < list1->length)    {        listMerge->listData[k++] = list1->listData[i++];    }    while (j < list2->length)    {        listMerge->listData[k++] = list2->listData[j++];    }}
0 0
原创粉丝点击