合并顺序表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并顺序表相关的知识,希望对你有一定的参考价值。

   将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表C,已知顺序表A和B的的元素个数分别为m和n

   思想:设定3个指针i,j,k分别指向A、B、C的首地址,然后进行A[i]、B[j]的比较,A[i]>B[j],则将B[j]赋值给C[k],同时j,k自增,否则对A进行相似的操作,直到A、B中至少有一数组

元素全都赋值完成,最后将另一数组剩下的元素赋值到C尾部

#include <stdio.h>
#include <stdlib.h>
#define ElemType int
//顺序表采用动态存储空间
typedef struct{
    ElemType *elem;//存储空间基地址 
    int length;//元素长度
    //int listsize;//当前分配的存储容量 
}SqList;
void merge(SqList A,SqList B,SqList &C)
{
    int i,j,k;
    i = j = k = 0;
    while(i < A.length && j < B.length)
    {
        if(A.elem[i] > B.elem[j])
        {
            C.elem[k] = B.elem[j];
            k ++ , j ++;
        }
        else{
            C.elem[k] = A.elem[i];
            k ++ , i ++;
        }
    }
    while(i < A.length)
    {
        C.elem[k] = A.elem[i];
        k ++ , i ++;
    }
    while(j < B.length)
    {
        C.elem[k] = B.elem[j];
        k ++ , j ++;
    }
    C.length = k;
}
int main()
{
    SqList A,B,C;
    int i;
    scanf("%d%d",&A.length,&B.length);//‘.’号为一级运算符,&为二级 
    A.elem = (ElemType *)malloc(sizeof(ElemType)*(A.length));//根据基地址开辟空间 
    B.elem = (ElemType *)malloc(sizeof(ElemType)*(B.length));
    C.elem = (ElemType *)malloc(sizeof(ElemType)*(B.length+A.length));
    for(i=0;i<A.length;i++)
        scanf("%d",&A.elem[i]);
    for(i=0;i<B.length;i++)
        scanf("%d",&B.elem[i]);
    merge(A,B,C);
    printf("合并后线性表:");
    for(i=0;i<C.length;i++)
        printf("%d,",C.elem[i]);
    return 0;
}

 

以上是关于合并顺序表的主要内容,如果未能解决你的问题,请参考以下文章

c语言实现两个顺序表的合并

顺序表 | 根据两个有序表查找合并后的中位数

合并顺序表

JavaScript笔试题(js高级代码片段)

数据结构 顺序表

顺序表非递减顺序合并