码迷,mamicode.com
首页 > 其他好文 > 详细

合并顺序表

时间:2016-04-02 00:47:30      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

   将两个非递减有序顺序表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;
}

 

合并顺序表

标签:

原文地址:http://www.cnblogs.com/520xiuge/p/5346706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!