1. 程式人生 > >【資料結構】順序表的應用(2)

【資料結構】順序表的應用(2)

問題:

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

#include "stdio.h"
#include "sequlist.h"
int main ()
{
    int length,i,j,input_number,a;
    sequence_list slt1,slt2,slt3;
    while(1)
    {
        init(&slt1);
        init(&slt2);
        init(&slt3);
        printf("請輸入想要建立的第一個順序表的長度:");
        scanf("%d",&length);
        printf("輸入%d個數字:\n",length);
        for (i=1;i<=length;i++)
        {
            scanf("%d",&input_number);
            append(&slt1,input_number);
        }
        printf("請輸入想要建立的第二個順序表的長度:");
        scanf("%d",&length);
        printf("請輸入%d個數字:\n",length);
        for (i=1;i<=length;i++)
        {
            scanf("%d",&input_number);
            append(&slt2,input_number);
        }
        printf("建立的第一個順序表是:");display(&slt1);puts("\n");
        printf("建立的第二個順序表是:");display(&slt2);puts("\n");
        sort_slt(&slt1,slt1.size_);
        sort_slt(&slt2,slt2.size_);
        printf("從小到大排序以後:\n");
        printf("第一個順序表是:");display(&slt1);puts("\n");
        printf("第二個順序表是:");display(&slt2);puts("\n");
        if (isempty(&slt2))
        {
            printf("合成後的順序表:");
            display(&slt1);puts("\n");
        }
        else if (isempty(&slt1))
        {
            printf("合成後的順序表:");
            display(&slt2);puts("\n");
        }
        else
        {
            if (slt1.a[0] <= slt2.a[0])
            {
                insert_(&slt2,slt1.a[0],0);
                delete_(&slt1,0);
            }
            j=1;
            while (slt1.size_  &&  j<slt2.size_)
            {
                if((slt1.a[0] <= slt2.a[j]) && (slt1.a[0] >= slt2.a[j-1]) )
                {
                    insert_(&slt2,slt1.a[0],j);
                    delete_(&slt1,0);
                }
                else
                {
                    j++;
                }
            }
            printf("合成後的順序表:");
            display(&slt2);puts("\n");
        }
    }
    return 0;
}