解题思路:
①:输入线性表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 人评分
traverseList(pHead3); return 0; } 大佬帮忙看看哪里出了错,codeblock输入样例运行正确,但是提交后错误50%,谢谢了。
while (q != NULL) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); pNew->data = q->data; q = q->pNext; pTail->pNext = pNew; pNew->pNext = NULL; pTail = pNew; } return pHead3; } void traverseList(PNODE pHead) { PNODE p = pHead->pNext; while (p != NULL) { printf("%d ", p->data); p = p->pNext; } return; } int main(void) { int m, n; scanf("%d", &m); PNODE pHead1 = createList(m); scanf("%d", &n); PNODE pHead2 = createList(n); PNODE pHead3 = mergeList(pHead1, pHead2, m, n);
新人小白 2019-08-14 09:53:30 |
像博主说的注意事项里,没有考虑m=0,n=0时的情况
if (p->data <= q->data) { pNew->data = p->data; p = p->pNext; } else if (p->data > q->data) { pNew->data = q->data; q = q->pNext; } pTail->pNext = pNew; pNew->pNext = NULL; pTail = pNew; } } while (p != NULL) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); pNew->data = p->data; p = p->pNext; pTail->pNext = pNew; pNew->pNext = NULL; pTail = pNew; }
PNODE mergeList(PNODE pHead1, PNODE pHead2, int m, int n) { int i; if (pHead1 == NULL || pHead2 == NULL) { printf("error"); exit(-1); } PNODE p = pHead1->pNext; PNODE q = pHead2->pNext; PNODE pHead3 = (PNODE)malloc(sizeof(NODE)); PNODE pTail = pHead3; pTail->pNext = NULL; if (pHead3 == NULL) { printf("error"); exit(-1); } for (i = 0; i < m + n; i++) { while (p != NULL && q != NULL) { PNODE pNew = (PNODE)malloc(sizeof(NODE));
#include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node *pNext; }NODE, *PNODE; PNODE createList(int len) { int i; PNODE pHead = (PNODE)malloc(sizeof(NODE)); PNODE pTail = pHead; pTail->pNext = NULL; if (pHead == NULL) { printf("error"); exit(-1); } for (i = 0; i < len; i++) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); scanf("%d", &pNew->data); pTail->pNext = pNew; pNew->pNext = NULL; pTail = pNew; } return pHead; }
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:781 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:568 |
【偶数求和】 (C语言代码)浏览:588 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:956 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:512 |
WU-判定字符位置 (C++代码)浏览:1471 |
多输入输出练习2 (C语言代码)浏览:1710 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:593 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:871 |
【出圈】 (C++代码)简单循环浏览:699 |