解题思路:
①:输入线性表LA,LB
②:据算法:首先i=0指向LA第一个元素,j=0指向LB第一个元素,k=0指向LC第一个元素
③:从LA,LB中第一个元素开始比较,若LA[i]<=LB[j] ,则LC[k]=LA[i],同时i++,k++(i,k指针后移)
若LA[i]>LB[j] ,则LC[k]=LB[j],同时j++,k++(j,k指针后移)
④:以上比较,插入操作当LA或者LB有一个遍历完结束
⑤:把未遍历完的表(LA或LB)中未遍历的部分加到LC最后一个元素后面
⑥:按要求输出LC
注意事项:
题目中:m大于等于0 n大于等于0,当输入的m和n 都为0 时,不能有任何输出,直接换行合并下一组数据
在代码中加了排序,怕输入数据不是非递减
参考代码:
#include<stdio.h> #include<malloc.h> int * creat_LA(int m); int * creat_LB(int n); int * creat_LC(int *LA,int *LB,int x,int m,int n); void output_LC(int *LC,int x); void sort_(int *L,int d); /*在代码中加了排序,怕输入数据不是非递减*/ int main() { int *LA=NULL,*LB=NULL,*LC=NULL; int m,n; while(scanf("%d",&m)!=EOF) { LA=creat_LA(m); scanf("%d",&n); LB=creat_LB(n); LC=creat_LC(LA,LB,m+n,m,n); if(m==0&&n==0) printf("\n"); else output_LC(LC,n+m); free(LA); free(LB); free(LC); } return 0; } /*---------------------------------------------*/ int * creat_LA(int m) { int *la=(int *)malloc(m*sizeof(int)); for(int i=0;i<m;i++) scanf("%d",&la[i]); sort_(la,m); return la; } /*---------------------------------------------*/ int * creat_LB(int n) { int *lb=(int *)malloc(n*sizeof(int)); for(int i=0;i<n;i++) scanf("%d",&lb[i]); sort_(lb,n); return lb; } /*---------------------------------------------*/ int * creat_LC(int *LA,int *LB,int x,int m,int n) { int *lc=(int *)malloc(x*sizeof(int)); int i=0,j=0,k=0; while(i<m&&j<n) if(LA[i]<=LB[j]) lc[k++]=LA[i++]; else lc[k++]=LB[j++]; while(i<m) lc[k++]=LA[i++]; while(j<n) lc[k++]=LB[j++]; return lc; } /*---------------------------------------------*/ void output_LC(int *LC,int x) { for(int i=0;i<x-1;i++) printf("%d ",LC[i]); printf("%d\n",LC[x-1]); } /*---------------------------------------------*/ void sort_(int *L,int d) { int min,term; for(int i=0;i<d;i++) { min=i; for(int j=i;j<d;j++) { if(L[j]<L[min]) min=j; } term=L[i]; L[i]=L[min]; L[min]=term; } }
别忘点赞哦-.-!
0.0分
8 人评分
#include <stdio.h> #include <stdlib.h> #define max 101 typedef int DataType; typedef struct { DataType date[max]; int length; }Seqlist; void InitList(Seqlist *L) { L->length=0; } void create(Seqlist *L,DataType n) { int i; for(i=0;i<n;i++) scanf("%d",&L->date[i]); L->length=i; } void change(Seqlist *L1,Seqlist *L2,Seqlist *L3) { int i=0,j=0,k=0; while(i<L1->length&&j<L2->length) { if(L1->date[i]<=L2->date[j]) { L3->date[k]=L1->date[i]; k++; i++; } else { L3->date[k]=L2->date[j]; k++; j++; } } if(i==L1->length) { while(j<L2->length) { L3->date[k]=L2->date[j]; k++; j++; } } if(j==L2->length) { w
简单的a+b (C语言代码)浏览:764 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:619 |
C语言程序设计教程(第三版)课后习题9.2 (Java代码)浏览:696 |
文科生的悲哀 (C语言代码)浏览:1538 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:438 |
The 3n + 1 problem (C语言代码)浏览:550 |
一元一次方程 (C语言代码)浏览:4245 |
输出九九乘法表 (C语言代码)浏览:1172 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:420 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:710 |