《数据结构》一般线性表的合并
发布时间:2020-12-15 05:59:11 所属栏目:安全 来源:网络整理
导读:一般线性表的合并 算法思想: 遍历表A和表B,查看B的每一个元素是否在A中,若不在,将B的该元素插入到A的表尾,A表的表长+1。 算法的时间复杂度和A、B的长度有关,O(m*n). //合并void Combine(SqList A,SqList B){for(int i=0;iB.length;i++){int count=0;
|
一般线性表的合并 算法思想: 遍历表A和表B,查看B的每一个元素是否在A中,若不在,将B的该元素插入到A的表尾,A表的表长+1。 算法的时间复杂度和A、B的长度有关,O(m*n). //合并
void Combine(SqList &A,SqList &B){
for(int i=0;i<B.length;i++){
int count=0;
for(int j=0;j<A.length;j++){
if(A.elem[j]==B.elem[i]){
count+=1;
}
}
if(count==0){
A.elem[A.length++]=B.elem[i];
}
}
}
具体实现: /*
一般线性表的合并
将两个线性表合并,LA={7,5,3,11},LB={2,6,3}
合并后{7,11,2,6}
*/
#include<stdio.h>
#include<iostream>
using namespace std;
#define MAX 100
typedef struct{
int *elem;
int length;
}SqList;
//初始化
int InitSqList(SqList &L){
L.elem=new int[MAX];
if(!L.elem){
return 0;//初始化失败
}else{
L.length=0;
return 1;//初始化成功
}
}
//获取表长
int ListLength(SqList L){
return L.length;
}
//遍历
void TraveList(SqList &L){
for(int i=0;i<L.length;i++){
printf("%d ",L.elem[i]);
}
printf("n");
}
//创建线性表
void CreateList(SqList &L){
printf("请输入线性表的长度:");
int n;
scanf("%d",&n);
printf("请输入表的元素:n");
int e;
for(int i=0;i<n;i++){
scanf("%d",&e);
L.elem[i]=e;
L.length=i+1;
}
}
//合并
void Combine(SqList &A,SqList &B){
for(int i=0;i<B.length;i++){
int count=0;
for(int j=0;j<A.length;j++){
if(A.elem[j]==B.elem[i]){
count+=1;
}
}
if(count==0){
A.elem[A.length++]=B.elem[i];
}
}
}
int main(){
SqList A,B;
if(InitSqList(A)){
printf("线性表A初始化成功!n");
}else{
printf("线性表A初始化失败!n");
}
if(InitSqList(B)){
printf("线性表B初始化成功!n");
}else{
printf("线性表B初始化成功!n");
}
CreateList(A);
printf("表长:%dn",A.length);
TraveList(A);
CreateList(B);
printf("合并后的线性表:n");
Combine(A,B);
TraveList(A);
}
数组实现上述操作: #include<stdio.h>
#define MAX 100
int main(){
int a[MAX];
int b[MAX];
int len1=0,len2=0;
int m,n;
printf("请输入两个表的长度:n");
scanf("%d%d",&m,&n);
printf("请输入第一个表的元素:n");
for(int i=0;i<m;i++){
scanf("%d",&a[i]);
len1+=1;
}
printf("请输入第二个表的元素:n");
for(int i=0;i<n;i++){
scanf("%d",&b[i]);
len2++;
}
printf("合并前两个表的长度:%d %dn",len1,len2);
//合并
for(int i=0;i<len1;i++){
int count=0;
for(int j=0;j<len2;j++){
if(a[i]==b[j]){
count+=1;
}
}
if(count==0){
b[len2++]=a[i];
}
}
for(int i=0;i<len2;i++){
printf("%d ",b[i]);
}
printf("n");
printf("合并后新表的长度:%dn",len2);
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
