zoukankan      html  css  js  c++  java
  • 顺序表应用5:有序顺序表归并

    顺序表应用5:有序顺序表归并

    Description

    已知顺序表A与B是两个有序的顺序表,其中存放的数据元素皆为普通整型,将A与B表归并为C表,要求C表包含了A、B表里所有元素,并且C表仍然保持有序。

    Input

     输入分为三行:
    第一行输入m、n(1<=m,n<=10000)的值,即为表A、B的元素个数;
    第二行输入m个有序的整数,即为表A的每一个元素;
    第三行输入n个有序的整数,即为表B的每一个元素;

    Output

     输出为一行,即将表A、B合并为表C后,依次输出表C所存放的元素。

    Sample

    Input 

    5 3
    1 3 5 6 9
    2 4 10

    Output 

    1 2 3 4 5 6 9 10
    //ios::sync_with_stdio(false);
    #include<iostream>
    #include<stdlib.h>
    #include<stdio.h>
    #define MaxSize 100001
     
    using namespace std;
    typedef int element;
    typedef struct List{
        element data[MaxSize];
        int size;
    }list1,list2,list3;
     
    void init(list1 &l1,list2 &l2,int a,int b,list3 &l3){
        for(int i = 0 ; i < a;i++){
            l1.data[i] = 0;
        }
        l1.size = a;
     
        for(int i = 0 ; i < b;i++){
            l2.data[i] = 0;
        }
        l2.size = b;
     
        for(int i = 0 ; i < a + b;i++){
            l3.data[i] = 0;
        }
        l3.size = a + b;
    }
     
    void input(list1 &l1,list2 &l2,int a,int b){
        int j;
     
        for(int i = 0 ; i < a;i++){
            cin >> j;
            l1.data[i] = j;
            //printf("%d
    ",l1.data[i]);
        }
     
        for(int i = 0 ; i < b;i++){
            cin >> j;
            l2.data[i] = j;
            //printf("%d
    ",l2.data[i]);
        }
    }
     
    void merge(list1 &l1,list2 &l2,list3 &l3){
        int aa = 0,bb = 0,index = 0;
        int c = l1.size + l2.size;
        //printf("%d
    ",c);
        while(c--){
            int a = (aa >= l1.size ? 65535 : l1.data[aa]);
            //printf("%d
    ",a);
            int b = (bb >= l2.size ? 65535 : l2.data[bb]);
            if(a > b){
                l3.data[index++] = b;
                //printf("%d
    ",a);
                bb++;
            }else{
                l3.data[index++] = a;
                aa++;
            }
        }
    }
     
    void output(list3 &l3){
        int i;
        for(i = 0 ; i < l3.size - 1;i++){
            printf("%d ",l3.data[i]);
        }
        printf("%d
    ",l3.data[i]);
    }
     
    int main(){
        ios::sync_with_stdio(false);
        int a,b;
        list1 l1;
        list2 l2;
        list3 l3;
        cin >> a >> b;
        init(l1,l2,a,b,l3);
        input(l1,l2,a,b);
        merge(l1,l2,l3);
        output(l3);
    }
  • 相关阅读:
    团队冲刺2.7
    单词接龙
    团队冲刺2.6
    梦断代码阅读笔记02
    团队冲刺2.5
    吾日三省吾身(6)
    吾日三省吾身(5)
    周计划01(20200921-20200927)
    吾日三省吾身(4)
    吾日三省吾身(3)
  • 原文地址:https://www.cnblogs.com/xiaolitongxueyaoshangjin/p/12584024.html
Copyright © 2011-2022 走看看