需要完整的,可以运行的代码。要求有序表的创建要调用函数,不能用数组来创建有序表
谢谢大家帮忙,我真的很努力努力了,可老师说实验报告不合格,已经打了好几天代码了,迫不得已来求助。热心人帮帮孩子吧!
需要完整的,可以运行的代码。要求有序表的创建要调用函数,不能用数组来创建有序表
谢谢大家帮忙,我真的很努力努力了,可老师说实验报告不合格,已经打了好几天代码了,迫不得已来求助。热心人帮帮孩子吧!
#include<stdio.h>
#include<stdlib.h>
typedef struct{
int *p; //有序表内容
int size; //有序表大小
}HString; //结构体别名
void Create(HString *a, int size){ //有序表创建
printf("请输入有序表的元素:\n");
a->size = size; //记录有序表大小
a->p = (int *)malloc(sizeof(int) * size); //为有序表申请内存空间
int *b = a->p; //保证a的值不发生改变
for(int i = 0; i < size; i++){
scanf("%d", b); //创建有序表
b++;
}
printf("\n"); //保证美观
}
void show(HString a){ //显示有序表中的内容
for(int i = 0; i < a.size; i++)
printf("%d ", *(a.p++));
printf("\n");
}
HString Merge(HString a, HString b){//合并函数
HString c;
c.size = a.size + b.size; //申请合并后的有序表内存空间
c.p = (int *)malloc(sizeof(int) * c.size);
int *d = c.p; //防止合并后的表中的指针地址发生改变
int size_a = 0; //计数有序表a的指针位置
int size_b = 0;
while(size_a < a.size && size_b < b.size){//当两者指针位置同时不大于自己的大小时
if(*a.p < *b.p){
*d = *a.p; //合并后的有序表内容值
a.p++; //有序表a的指针后移
size_a++; //位置计数+1
}else{
*d = *b.p;
b.p++;
size_b++;
}
d++;
}
while(size_a < a.size){ //当a表还有内容剩余时
*(d++) = *(a.p)++; //全部接到c后
size_a++;
}
while(size_b < b.size){
*(d++) = *(b.p)++;
size_b++;
}
return c; //返回对象c
}
int main(){ //这里没有释放b的内存,
HString a, b; //定义有序表a, b
int ca, cb; //a, b的大小
printf("请输入有序表a的长度:\n");
scanf("%d", &ca);
Create(&a, ca); //创建有序表a
printf("请输入有序表b的长度:\n");
scanf("%d", &cb);
Create(&b, cb); //创建有序表b
a = Merge(a, b); //合并有序表a 、b
show(a); //显示合并后的有序表a
return 0;
}