将两个有序线性表合并成一个有序线性表,并去掉重复元素

作者&投稿:叱干泉 (若有异议请与网页底部的电邮联系)
~ 代码写好了。
经测试VC下通过。
#include
<stdio.h>
int
merge(int
*a,int
n1,int
*b,int
n2,int
*s)
{
int
i=0,j=0,k=0;
while(i<n1&&j<n2)
{
if(a[i]>b[j]){
if(k&&s[k-1]==b[j])//有重复元素
j++;
else
s[k++]=b[j++];
}
else{
if(k&&s[k-1]==a[i])//有重复元素
i++;
else
s[k++]=a[i++];
}
}
while(i<n1){
if(k&&s[k-1]==a[i])
i++;
else
s[k++]=a[i++];
}
while(j<n2){
if(k&&s[k-1]==b[j])//有重复元素
j++;
else
s[k++]=b[j++];
}
return
k;
}
int
main()
{
int
a[100],b[100],s[200],n1,n2,i,n3;
printf("输入第一个数组元素个数:");
scanf("%d",&n1);
printf("输入%d个升序元素(空格隔开):",n1);
for(i=0;i<n1;i++)
scanf("%d",&a[i]);
printf("输入第二个数组元素个数:");
scanf("%d",&n2);
printf("输入%d个升序元素(空格隔开):",n2);
for(i=0;i<n2;i++)
scanf("%d",&b[i]);
n3=merge(a,n1,b,n2,s);
//a和b数组的元素合并到s数组里去(并消除重复元素),并返回合并后数组的元素个数
printf("合并后元素数组为:");
for(i=0;i<n3;i++)
printf("%d
",s[i]);
printf("\n");
return
0;
}
附测试数据一组:
5
3
50
50
100
100
3
8
50
80
输出为:3
8
50
80
100

试写一个算法,将两个有序线性表合并成一个有序线性表。
答:void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){ //已知单链线性表La和Lb的元素按非递减排列 //归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列 AH=La;BH=Lb;CH=Lc;pa=AH_next;pb=BH_next;CH=pc=AH;//用La的头结点作为Lc的头结点 while(pa&&pb){ if(p...

将两个有序线性表合并成一个有序线性表,并去掉重复元素
答:printf("输入第二个数组元素个数:");scanf("%d",&n2);printf("输入%d个升序元素(空格隔开):",n2);for(i=0;i<n2;i++)scanf("%d",&b[i]);n3=merge(a,n1,b,n2,s);//a和b数组的元素合并到s数组里去(并消除重复元素),并返回合并后数组的元素个数 printf("合并后元素数组为:"...

将两个有序线性表合并成一个有序线性表,并去掉重复元素
答:int a[100],b[100],s[200],n1,n2,i,n3;printf("输入第一个数组元素个数:");scanf("%d",&n1);printf("输入%d个升序元素(空格隔开):",n1);for(i=0;i<n1;i++)scanf("%d",&a[i]);printf("输入第二个数组元素个数:");scanf("%d",&n2);printf("输入%d个升序元素(空格隔...

将两个有序线性表合并成一个有序线性表,用C语言 在线急等!!!
答:int a[100],b[100],s[200],n1,n2,i,n3;printf("输入第一个数组元素个数:");scanf("%d",&n1);printf("输入%d个升序元素(空格隔开):",n1);for(i=0;i<n1;i++)scanf("%d",&a[i]);printf("输入第二个数组元素个数:");scanf("%d",&n2);printf("输入%d个升序元素(空格隔...

试编写一个算法,将两个有序线性表合成一个有序线性表...最好是在c++...
答:if(L->length==L->listsize) //存储空间不够,增加一个 { L->data=(ElemType *)realloc(L->data,(L->listsize+1)*sizeof(ElemType));L->listsize++; //重置存储空间长度 } for(j=L->length;j>=i;j--)L->data[j]=L->data[j-1]; //将序号为i的结点及之后的结点后移 L->...

已知两个按元素值有序的线性表A和B,编程实现:将A和B有序归并成一个按...
答:int b[9]={1,2,4,7,9,12,33,43,56};LinkList *pa=NULL;LinkList *pb=NULL;LinkList *pc=NULL;LinkList *la=NULL;//la,lb,lc保存链表首地址 LinkList *lb=NULL;LinkList *lc=NULL;// 初始化单链表 for(int i=7;i>=0;i--){ pa=(LinkList *) malloc(sizeof(struct Link...

怎样用C++实现两个有续线性表合并成一个有续线性表
答:1.将一个表插入另外一个表 2.或者新建一个有续线性表,再将两个表分别插入 3.或者自己写一个线性表,当插入的时候自动插入到有序的位置 其实关键就是你的插入操作:假设:每个节点为node类型,其数据为整形,单向线性表为list,以整数的升序形成有续表 int insert(node *insertnode){ node *temp=...

将两个顺序存储的有序线性表S1和S2合并,使得合并后的线性表S仍然有序...
答:pascal没用过,不过可以说一下思路:申请一块新的线性表空间,空间大小为S1+S2的长度,这个线性表为S,int nIndex = 0; // S的下标 int i=0; // S1的下标 int j=0; // S2的下标 while ( i<s1.len() && j<s2.len() ){ if (s1[i] < s2[j])s[nIndex++] = s1[i++];e...

定义两个按升序排列的有序线性表,将它们合并成一个,要求合并后的线性表...
答:我只说思想,把两组数列从头开始依次比较,若a数列的数小,将其放在新建数列中,并将a数列向后读取一个,b数列不变还是刚才的数,再次比较,重复知道其中一个数列全部比完并加入到新数列为止,然后将另一数列剩余的数据复制到新数列何中,完毕。。加油啊 ...

用顺序存储实现两个线性表合并
答:合并两个线性表中的元素,相同的元素只保留一个,代码如下:pragma once define ListSize 200 include <iostream> using namespace std;typedef int DataType;typedef struct { DataType list[ListSize];int length;}SeqList;//初始化线性表 void InitList(SeqList *L){ L->length = 0;//把线性...