顺序表合并(java实现)

两个升序表,合并生成第三个升序表。

我们使用3个类实现功能。

SxbSX类生成顺序表并遍历打印,如下:

public class SxbSX {
    int elem[];
    int length;
    SxbSX(){        //构造函数
        elem=new int [100];
        length=0;
    }

    void display()//遍历
    {
        for(int i=0;i<length;i++){
            System.out.print(elem[i]+" ");
        }
        System.out.print(" ");
    }

}

SxbHB类是核心代码,开始尝试for实现逐个比较输出到LC,但是失败了。。

public class SxbHB {
    //先预定三个顺序表
    SxbSX LA,LB,LC;

    SxbHB()
    {
    }

    void merge() throws Exception
    {
        int i=0;
        int j=0;
        SxbSX LA=new SxbSX();
        LA.length=5;
        LA.elem[0]=12; LA.elem[1]=23; LA.elem[2]=34; LA.elem[3]=45; LA.elem[4]=56;


        SxbSX LB=new SxbSX();
        LB.length=5;
        LB.elem[0]=1; LB.elem[1]=2; LB.elem[2]=3; LB.elem[3]=4; LB.elem[4]=5;

        SxbSX LC=new SxbSX();
        LC.length=10;
//发现for循环行不通,有点复杂,不够灵活
       /* for(int x=0;x<LA.length;){
       *     for(int y=0;y<LB.length;){
       *        for(int k=0;k<10;k++){
       *             if(LA.elem[i]>LB.elem[j])
       *            {LC.elem[k]=LB.elem[j];j++;}
       *                       else
       *              {  LC.elem[k]=LA.elem[i];i++;}
       *
       *        }
       *
       *    }
       *}
       */
        int k=0;
        while(i<LA.length&&LB.length>j) {
            if (LA.elem[i] > LB.elem[j]) {
                LC.elem[k++] = LB.elem[j++];
            } else {
                LC.elem[k++] = LA.elem[i++];
            }
        }
        while(i<LA.length){
            LC.elem[k]=LA.elem[i];
            i++;
            k++;

        }

        while(j<LB.length){
            LC.elem[k]=LB.elem[j];
            j++;
            k++;

        }
        LC.display();
        System.out.print(" ");
    }
}

demon类是主函数:

public class demo6 {
    public static void main(String args[]) throws Exception
    {

        SxbHB SH=new SxbHB();
        SH.merge();

    }
}

最后是结果截图:

 过程对于我这种菜鸟还有点小困难,不过还是稳畅运行了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值