归并后含有重复元素和不含重复元素
//有序顺序表的归并----归并后不含重复元素
算法思想:
1.表不空,则比较两表元素
2.依次存入Lc表,且表长++
3.将长表剩余元素存入Lc
int Merge_List(SqList &La,SqList &Lb,SqList &Lc)
{
int i=0,j=0,k=0;
while(i<La.length&&j<Lb.length)
{
if(La.data[i]<Lb.data[j])
{
Lc.data[k++]=La.data[i++];
Lc.length++;
}
if(La.data[i]==Lb.data[j])
{
Lc.data[k++]=La.data[i++];
j++; //跳过Lb中重复元素
Lc.length++;
}
else
{
Lc.data[k++]=Lb.data[j++];
Lc.length++;
}
}
while(i<La.length)
{
Lc.data[k++]=La.data[i++];
Lc.length++;
}
while (j < Lb.length)
{
Lc.data[k++]=Lb.data[j++];
Lc.length++;
}
return OK;
}
//有序顺序表的归并----归并含重复元素
算法思想:
1.表不空,则比较两表元素
2.依次存入Lc表,且表长++
3.将长表剩余元素存入Lc
int Merge_List(SqList &La,SqList &Lb,SqList &Lc)
{
int i=0,j=0,k=0;
while(i<La.length&&j<Lb.length)
{
if(La.data[i]<=Lb.data[j])
{
Lc.data[k++]=La.data[i++];
Lc.length++;
}
else
{
Lc.data[k++]=Lb.data[j++];
Lc.length++;
}
}
while(i<La.length)
{
Lc.data[k++]=La.data[i++];
Lc.length++;
}
while (j < Lb.length)
{
Lc.data[k++]=Lb.data[j++];
Lc.length++;
}
return OK;
}
完整代码
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define EEROR 0
#define Init_Size 100
//顺序表类型定义
typedef struct{
int *data;
int length;
int Max_Size;
}SqList;
//顺序表的初始化
void Init_List(SqList &L)
{
L.data=(int *)malloc(Init_Size*sizeof(int));
L.length=0;
L.Max_Size=Init_Size;
}
//建立顺序表
int Cre_List(SqList &L)
{
int i=0;
int x=0;
scanf("%d",&x);
while(x!=8888)
{
L.data[i++]=x;
L.length++;
scanf("%d",&x);
}
return OK;
}
//输出顺序表
int Print_List(SqList &L)
{
int i=0;
for(i=0;i<L.length;i++)
{
printf("%d\n",L.data[i]);
}
return OK;
}
//归并表
int Merge_List(SqList &La,SqList &Lb,SqList &Lc)
{
int i=0,j=0,k=0;
while(i<La.length&&j<Lb.length)
{
if(La.data[i]<Lb.data[j])
{
Lc.data[k++]=La.data[i++];
Lc.length++;
}
if(La.data[i]==Lb.data[j])
{
Lc.data[k++]=La.data[i++];
j++; //跳过Lb中重复元素
Lc.length++;
}
else
{
Lc.data[k++]=Lb.data[j++];
Lc.length++;
}
}
while(i<La.length)
{
Lc.data[k++]=La.data[i++];
Lc.length++;
}
while (j < Lb.length)
{
Lc.data[k++]=Lb.data[j++];
Lc.length++;
}
return OK;
}
int main()
{
SqList La,Lb,Lc;
Init_List(La);
printf("请输入La表元素:");
Cre_List(La);
printf("La中表元素有:\n");
Print_List(La);
Init_List(Lb);
printf("请输入Lb表元素:");
Cre_List(Lb);
printf("Lb中表元素有:\n");
Print_List(Lb);
Init_List(Lc);
if(Merge_List(La,Lb,Lc))
{
printf("归并后Lc表:\n");
Print_List(Lc);
}
else
{
printf("归并失败:");
}
}