原题链接:数据结构-有序线性表的有序合并
解题思路:
①:输入线性表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分
7 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
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);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; }#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