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

来源:互联网 发布:h3c 端口带宽利用率 编辑:程序博客网 时间:2024/05/21 09:30
#include<iostream>#include<algorithm>using namespace std;const int maxn=20010;typedef struct{    int *emue;    int lengh;}lis;void initlist(lis *L)///顺�表���{    L->emue=new int [maxn];    L->lengh=0;}void creat(lis &L, int k)///建表{    L.lengh=k;    for(int i=0;i<L.lengh;i++)    {        cin>>L.emue[i];    }}void del(lis &L, int k)///��{    for(int i=k;i<L.lengh-1;i++)        L.emue[i]=L.emue[i+1];    L.lengh--;}void loclist(lis &L)///����{    for(int i=0;i<L.lengh-1;i++)        for(int j=i+1;j<L.lengh;j++)        {            if(L.emue[i]==L.emue[j])            {                del(L, j);                j--;            }        }}void mov(lis &L, int n, int m)///移�{    for(int i=0;i<m;i++)        L.emue[i+n]=L.emue[i];}void creatdel(lis &L, int m)///边建边�{    L.emue=new int [m];    L.lengh=0;    int num=0;    int x, flag;    while(num<m)    {        cin>>x;        num++;        if(L.lengh==0)        {            L.emue[0]=x;            L.lengh++;        }        else        {            flag=1;            for(int i=0;i<L.lengh;i++)            {                if(L.emue[i]==x)                {                    flag=0;                    break;                }            }            if(flag)            {                L.emue[L.lengh]=x;                L.lengh++;            }        }    }}void merger(lis &L1, lis &L2, lis &L3){    int k=0, i=0, j=0;    while(i<L1.lengh&&j<L2.lengh)    {        if(L1.emue[i]>L2.emue[j])        {            L3.emue[k]=L2.emue[j];            j++;            k++;        }        else        {            L3.emue[k]=L1.emue[i];            i++;            k++;        }    }    for(int n=i;n<L1.lengh;n++)    {        L3.emue[k]=L1.emue[n];        k++;    }    for(int n=j;n<L2.lengh;n++)    {        L3.emue[k]=L2.emue[n];        k++;    }    L3.lengh=k;}/*int order(lis &L, int n){    int x, mid, low, high;    cin>>x;    low=0;    high=n-1;    while(low<=high)    {        mid=(low+high)/2;        if(x>L.emue[mid])            low=mid+1;        else if(x<L.emue[mid])            high=mid-1;        else return mid;    }    return -1;}*/int main(){    ios::sync_with_stdio(false);    lis L1, L2, L3;    int m, n;    cin>>n>>m;    initlist(&L1);    creat(L1, n);    initlist(&L2);    creat(L2, m);    initlist(&L3);    merger(L1, L2, L3);    for(int i=0;i<L3.lengh;i++)        cout<<L3.emue[i]<<" ";    return 0;}

1 0