順序表應用5:有序順序表歸併

HowieLee59發表於2019-01-26

Problem 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

Sample Output

1 2 3 4 5 6 9 10

Hint

Source

這個題主要練習的是結構體的知識與順序表合併。

//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\n",l1.data[i]);
    }

    for(int i = 0 ; i < b;i++){
        cin >> j;
        l2.data[i] = j;
        //printf("%d\n",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\n",c);
    while(c--){
        int a = (aa >= l1.size ? 65535 : l1.data[aa]);
        //printf("%d\n",a);
        int b = (bb >= l2.size ? 65535 : l2.data[bb]);
        if(a > b){
            l3.data[index++] = b;
            //printf("%d\n",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\n",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);
}

 

相關文章