jqtree 2021-04-02 20:57 采纳率: 80%
浏览 33
已采纳

数据结构 实现两个有序表(不是链表)的归并

需要完整的,可以运行的代码。要求有序表的创建要调用函数,不能用数组来创建有序表

谢谢大家帮忙,我真的很努力努力了,可老师说实验报告不合格,已经打了好几天代码了,迫不得已来求助。热心人帮帮孩子吧!

  • 写回答

7条回答 默认 最新

  • CSDN专家-小白 2021-04-03 01:08
    关注
    #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;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c