顺序表-增(插入)

来源:互联网 发布:软件质量指标 编辑:程序博客网 时间:2024/06/11 04:55

1)例:设数据集合data={2,5,7,8,10,14,16},升序有序,将某个关键字key,插入到数据集合中,使其依然有序。

①int JosephRing(int data[],int n,int key){    int i,j;    for(i=0;i<n && data[i]<key;i++);    for(j=n;j>i;j--)    {        data[j]=data[j-1];    }    data[j]=key;    return n+1;}②int JosephRing(int data[],int n,int key){    int i;    for(i=n-1;i>0 && data[i]>key;i--)    {        data[i+1]=data[i];    }    data[i+1]=key;    return n+1;}

2)例:设data1和data2是两个升序列,将data1和data2和并成一个升序序列。
如:data1={2,3,4,5,8,10,12,14,15}
data2={3,3,5,6,7,8};

int Merge(int data1[],int n1,int data2[],int n2,int data[]){    int i,j,k;    i=j=k=0;    while(i<n1 && j<n2)//当两者都未完时    {        if(data1[i]<data2[j])            data[k++]=data1[i++];        else            data[k++]=data2[j++];    }    //当有一者进行判单完时,需要对两者进行判断    while(i<n1)    {        data[k++]=data1[i++];    }    while(j<n2)    {        data[k++]=data1[j++];    }    return k;}②int Merge(int data1[],int n1,int data2[],int n2,int data[]){    int i,j,k;    i=j=k=0;    while(i<n1 && j<n2)    {        if(data1[i]<data2[j])            data[k++]=data1[i++];        else            data[k++]=data2[j++];    }    //当有一者进行判单完时,进行抽象    int *s=data1;    if(j<n2)    {        s=data2;        i=j;        n1=n2;    }    while(i<n1)    {        data[k++]=s[i++];    }    return k;}③int Merge(int data1[],int n1,int data2[],int n2,int data[]){    int i=0,j=0,k=0;    while(i<n1 || j<n2)    {        /*            将data1的值给data的条件:            ⅰ.data2进行完            ⅱ.data2未完,data1未完且data1当前值小于data2当前值            其余情况data2值给data        */        if(j==n2 || (i<n1 && data1[i]<data2[j]))            data[k++]=data1[i++];        else            data[k++]=data2[j++];    }    return k;}