【資料結構】順序表的應用(2)
阿新 • • 發佈:2018-12-11
問題:
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; }