1. 程式人生 > >資料結構 將兩個有序順序表合成一個有序順序表

資料結構 將兩個有序順序表合成一個有序順序表

題目:

     有順序表A和B,其元素均按從小到大的升序排列,編寫一個演算法,將它們合併成一個順序表C,要求C的元素也按從小到大的升序排列

程式碼:

#include<stdio.h>
#define MAX 100
typedef int datatype;
typedef struct
{
    datatype a[MAX];
    int size;
}sequence_list;
void init(sequence_list *L)
{
    L->size=0;
}
void function(sequence_list *L,sequence_list *R)
{
    int i,j,k;
    for(i=0;i<R->size;i++)
    {
        for(j=L->size-1;j>=0;j--)
        {
            if(R->a[i]<L->a[j])
            {
                L->a[j+1]=L->a[j];
                if(j==0)
                    L->a[0]=R->a[i];
            }
            else if(R->a[i]>=L->a[j])
            {
                L->a[j+1]=R->a[i];
                break;
            }

        }
        L->size++;
    }
}
int main()
{
    sequence_list L,R;
    datatype a;
    int i;
    init(&L);
    init(&R);
    printf("請從小到大輸入第一個順序表,以0結尾:");
    scanf("%d",&a);
    while(a)
    {
        L.a[L.size]=a;
        L.size++;
        scanf("%d",&a);
    }
    printf("\n請從小到大輸入第二個順序表,以0結尾:");
    scanf("%d",&a);
    while(a)
    {
        R.a[R.size]=a;
        R.size++;
        scanf("%d",&a);
    }
    function(&L,&R);
    printf("\n合成過後的順序表是:");
    for(i=0;i<L.size;i++)
        printf("%d ",L.a[i]);
    return 0;
}