Chapter 2
將兩個有序順序表合并為一個新的有序順序表,并由函數(shù)返回結(jié)果順序表。
#include<stdio.h>
#include<stdlib.h>
#define Max 100
struct SqList{
int data[Max];
int length;
};
bool merge(SqList a, SqList b, SqList &c){
// 新合并的表長度 小于 兩表長度和
if(c.length < a.length + b.length){
printf("新合并的表長度 小于 兩表長度和");
return false;
}
int i = 0, j = 0, k = 0;
while(i < a.length && j < b.length){
if(a.data[i] <= b.data[j]){
c.data[k] = a.data[i];
k++, i++;
}
else{
c.data[k] = b.data[j];
k++, j++;
}
}
// a 表中元素還有剩余
while(i < a.length){
c.data[k] = a.data[i];
k++, i++;
}
// b 表中元素還有剩余
while(j < b.length){
c.data[k] = b.data[j];
k++, j++;
}
return true;
}
// 打印順序表
void show(SqList s){
if(s.length == 0){
printf("線性表為空");
return;
}
for(int i = 0; i < s.length; i++){
printf("%d ", s.data[i]);
}
printf("\n");
}
int main(){
SqList a = {{1, 3, 5, 7, 9}, 5};
SqList b = {{2, 4, 6, 8, 10}, 5};
SqList c;
c.length = a.length + b.length;
show(a);
show(b);
if(merge(a, b, c)){
show(c);
}
return 0;
}