• 数据结构--合并顺序表


    /**
    *  有序顺序表的合并: 已知顺序表LA、LB中的数据元素按值非递减有序排列,
    *  现要求将LA和LB归并为一个新的顺序表LC,且LC中的数据元素仍按值非递减有序排列
    */ 
    #include<stdio.h> 
    typedef int ElemType;
    struct SqList                   //结构体 
    {
        ElemType *elem; 
        int listsize;
        int length;
    };
    void InputData(SqList &LA)      //输入LA表数据 
    {
        printf("请按升序输入一系列整数,用空格隔开,以-9999结尾:
    ");
        int temp;
        for(int i=0;;i++)           //循环输入一系列整数 
        {
            scanf("%d",&temp);
            if(temp!=-9999)
            {
                LA.elem[i]=temp;
                LA.length++;
            }
            else
                break;
        }
    }
    void MergeList_Sq(SqList LA,SqList LB,SqList &LC)
    {                                           //LA、LB中元素原来按非递减顺序存储要求合并后的LC也按照非递减序存储
        int i,j,k;
        i=j=k=0;                                //下面生成线性表LC
        LC.length=LA.length+LB.length;          //表LC长度 
        LC.listsize=LA.length+LB.length;        //??? 
        LC.elem=new ElemType[LC.listsize];       
    
        while(i<=LA.length-1 && j<=LB.length-1){//当LA、LB同时不为空时,进行下面操作
            ElemType pa=LA.elem[i];             //取LA的第i个元素
            ElemType pb=LB.elem[j];             //取LB的第j个元素
            if(pa<=pb) 
            {                                   //如果pa<=pb
                LC.elem[k]=pa;                  //pa插入LC尾部
                k++;i++;                        //LC、LA下标后移
    }
            else
            {
                LC.elem[k]=pb;
                k++;j++;
            }
        }
        while(i<=LA.length-1)
        {                                       //如果LA中还有元素,则所有元素全部插入LC尾部
            ElemType pa=LA.elem[i];
            LC.elem[k]=pa;
            k++;i++;
        }
        while(j<=LB.length-1)
        {                                       //如果LB中还有元素,则所有元素全部插入LC尾部   
            ElemType pb=LB.elem[j];
            LC.elem[k]=pb;
            k++;j++;
        }
    }
    void print(SqList LC)               //输出合并后表LC的数据 
    {
        for(int i=0;i<LC.length;i++)
            printf("%d ",LC.elem[i]);
        printf("
    ");
    }
    int main(void)
    {
        SqList LA,LB,LC;
        LA.elem=new ElemType[100];  //初始化LA 
        LA.length=0;
        LA.listsize=100;
    
        LB.elem=new ElemType[100];  //初始化LB 
        LB.length=0;
        LB.listsize=100;
    
        InputData(LA);              //输入表LA的数据 
        InputData(LB);              //输入表LB的数据 
        MergeList_Sq(LA,LB,LC);     //合并数据 
        print(LC);                  //输出数据  
    }
    
    
  • 相关阅读:
    【bzoj1191】 HNOI2006—超级英雄Hero
    【poj3020】 Antenna Placement
    【poj1274】 The Perfect Stall
    【poj2724】 Purifying Machine
    【poj2226】 Muddy Fields
    【codevs1257】 打砖块
    【poj2186】 Popular Cows
    【poj1236】 Network of Schools
    【poj1144】 Network
    【poj3177】 Redundant Paths
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10454029.html
Copyright © 2020-2023  润新知