一般线性表的合并
算法思想:
遍历表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("表长:%d\n",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 %d\n",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("合并后新表的长度:%d\n",len2); }原文链接:https://www.f2er.com/datastructure/382544.html