求大神帮忙用C语言写一个程序。 要求:定义两个线性表(内容由用户输入),合并这两个线性表,并按顺序

求大神帮忙用C语言写一个程序。
要求:定义两个线性表(内容由用户输入),合并这两个线性表,并按顺序(从大到小)输出。

#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include <stdbool.h>

typedef struct{
int *data;
int length; // 线性表的长度
int top; // 线性表的当前元素个数
}List;

// 初始化线性表
void list_init(List *li,int length){
li->length = length;
li->top = 0;
li->data = (int*) malloc(li->length * sizeof(int));
}

// 向线性表插入元素
bool add_list(List* li, int data){
if(li->top >= li->length){
return false;
}

li->data[li->top++] = data;
return false;
}

// 将两个线性表合并并对元素进行排序
void merge_list(List *dest, List *li1, List *li2){
list_init(dest, li1->top+li2->top+1);
// 把线性表li1,li2的所有元素添加到线性表dest中
int i = 0;
while(i < li1->top){
add_list(dest, li1->data[i]);
i++;
}
i = 0;
while(i < li2->top){
add_list(dest, li2->data[i]);
i++;
}

// 把线性表dest元素进行排序(由大到小)
for(i=0; i<dest->top; i++){
int j;
for(j=i; j<dest->top; j++){
if(dest->data[i] < dest->data[j]){
int t = dest->data[i];
dest->data[i] = dest->data[j];
dest->data[j] = t;
}
}
}
}

// 显示线性表
void show_list(List *li){
int i;
for(i=0; i<li->top; i++){
printf("%3d",li->data[i]);
if((i+1)%10 == 0){
printf("\n");
}
}
printf("\n");
}

int main(void)
{
int arr1[7]={11,4,7,2,9,15,10};
int arr2[5]={2,1,5,1,19};

List li1;
list_init(&li1, 50);
int i;
for(i=0; i<7; i++){
add_list(&li1,arr1[i]);
}
show_list(&li1);

List li2;
list_init(&li2, 50);
for(i=0; i<5; i++){
add_list(&li2,arr2[i]);
}
show_list(&li2);

List dest;
merge_list(&dest, &li1, &li2);
show_list(&dest);

return 0;

}
温馨提示:答案为网友推荐,仅供参考
相似回答