数据结构 顺序表La和Lb合并

142 阅读1分钟

题目:
在这里插入图片描述

#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);
}

结果:在这里插入图片描述