通过数组、循环、scanf语句实现输入两个有序的初始线性表LA和LB。将LB中的元素依次插入到LA有序表中去,完成线性表合并,合并后的线性表依然是有序的,并且要求两个线性表中相同的数据只保留一个即可。例如:执行结果大致如下:
请输入线性表LA:1 3 5 7 9
请输入线性表LB:1 2 3 4 5
合并后的有序线性表LA为:1 2 3 4 5 7 9
有序顺序结构线性表的合并操作
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- fuill 2022-09-05 15:28关注
解答如下,有问题请回复
#include <stdio.h> #define MAXSIZE 100 typedef int DataType; typedef struct{ DataType data[MAXSIZE]; int last; }Seqlist; /**********************************/ /*函数名称:initseqlist() */ /*函数功能:初始化顺序表 */ /**********************************/ void initseqlist(Seqlist *L) { L->last=0; } /**********************************/ /*函数名称:input() */ /*函数功能:输入顺序表 */ /**********************************/ void input(Seqlist *L) { DataType x; initseqlist(L); char flag=0; do { scanf("%d",&x); L->data[L->last++]=x; flag=getchar(); }while(flag!='\n'); } /**********************************/ /*函数名称:print() */ /*函数功能:输出顺序表 */ /**********************************/ void print(Seqlist *L) { int i; if(L->last==0) printf("顺序表为空\n"); else for(i=0;i<L->last;i++) { printf("%5d",L->data[i]); if((i+1)%10==0) printf("\n"); } printf("\n"); } void insert(Seqlist *L,int x) { int i,j; for(i=0;i<L->last;i++) { if(L->data[i]>x) { if(L->data[i-1]!=x) { for(j=L->last;j>i;j--) { L->data[j]=L->data[j-1]; } L->data[i]=x; L->last++; } break; } } } void merge(Seqlist *LA,Seqlist *LB) { int i,j,k; for(i=0;i<LB->last;i++) { insert(LA,LB->data[i]); } } int main() { Seqlist LA,LB,LC; printf("请输入线性表LA:"); input(&LA); printf("请输入线性表LB:"); input(&LB); printf("合并后的有序线性表LA为:"); merge(&LA,&LB); print(&LA); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 1