zoukankan      html  css  js  c++  java
  • 合并顺序表

       将两个非递减有序顺序表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;
    }
    
  • 相关阅读:
    yum 安装pip
    sed和awk用法
    awk删除最后一个字符
    shell读取文件内容并进行变量赋值
    git 添加、提交、推送
    git 本地代码冲突解决,强制更新
    sys系统模块
    os模块
    time-时间模块
    环境变量的使用
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/5346706.html
Copyright © 2011-2022 走看看