题目:
#include <iostream>
#include <malloc.h>
#define LISTINCREMENT 10
using namespace std;
typedef struct{//线性表的动态分配顺序存储结构
int *elem;//存储空间基址
int length;//当前长度
int listsize;//当前地址
}SqList;
void Init_L(SqList &L){//构造一个空的线性表
L.elem = (int *)malloc(50*sizeof(int));
L.length = 0;
L.listsize = 50;
}
void Crete_L(SqList &L,int array[],int length){//给线性表赋值
for(int i=0;i<length;i++){
L.length++;
L.elem[i]=array[i];
}
}
void List_L(SqList L){ //遍历顺序表
for(int i=0;i<L.length;i++){
cout<<L.elem[i]<<' ';
}
}
int GetFinnd_L(SqList &L,int t){//获得插入位置
for(int i=0;i<=L.length;i++){
if(L.elem[i]>t || i == L.length ){
return ++i;
}
}
}
int Inter_L(SqList &L,int t,int x){ //顺序表插入操作
for(int i=L.length-1;i>=x-1;i--)
L.elem[i+1]=L.elem[i];
L.elem[x-1] = t;
L.length++;
}
int FindCity_L(SqList L,int t){//查找两表之间有没有一样的的
for(int i=0;i<=L.length;i++){
int k = L.elem[i];
if(k == t)
return 1;
if(i==L.length)
return -1;
}
}
void City_L(SqList &Lc,SqList &Ld){//合并两表不排斥一样的
int length = Lc.length +Ld.length;
if(length >Lc.listsize){
int leng = length - Lc.listsize;
Lc.elem = (int *)realloc(Lc.elem,(Lc.listsize+leng)*sizeof(int));
Lc.listsize +=leng;
}else{
for(int i=0;i<Ld.length;i++){
int x = GetFinnd_L(Lc,Ld.elem[i]);
Inter_L(Lc,Ld.elem[i],x);
}
}
}
void TexyCity(SqList La,SqList &Lc,SqList &Ld){//拷贝表内容
Init_L(Lc);
for(int i=0;i<=La.length;i++){
Lc.length++;
Lc.elem[i] = La.elem[i];
}
Lc.length--;
City_L(Lc,Ld);
}
int main(){
SqList La;
SqList Lb;
SqList Lc;
SqList Ld;
int x;
int La_array[] ={1,2,3,4,5};
int Lb_array[] ={2,4,6,8,10};
int Ld_array[] ={2,6,8,9,11,15,20};
int leng_La = sizeof(La_array)/sizeof(La_array[0]);
int leng_Lb = sizeof(Lb_array)/sizeof(Lb_array[0]);
int leng_Ld = sizeof(Ld_array)/sizeof(Ld_array[0]);
//数组传参无法获得数组长度只能把长度一起传过去
Init_L(La);
Crete_L(La,La_array,leng_La);
Init_L(Lb);
Crete_L(Lb,Lb_array,leng_Lb);
Init_L(Ld);
Crete_L(Ld,Ld_array,leng_Ld);
for(int i=0;i<Lb.length;i++){
int y = FindCity_L(La,Lb.elem[i]);
if(y==-1){
x = GetFinnd_L(La,Lb.elem[i]);
Inter_L(La,Lb.elem[i],x);
}
}
TexyCity(La,Lc,Ld);
List_L(Lc);
}
结果: