假设以两个元素依次递增有序排序排列的线性表 A 和 B 分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表 C,其元素为 A 和 B 中的元素的交集,且表 C 中的元素也依值递增有序排列。
试对顺序表编写求 C 的算法。
C++
#include
using namespace std;
#define MaxSize 50
//定义线性表
typedef struct{
int data[MaxSize];
int length;
}SqList;
//插入数据项 前插
//插入的时候,是按第几个数据项算的,不是数组
int ListInsert(SqList &L,int i,int e)
{
//线性表长度大于给定maxsize 返回-1
if(L.length>=MaxSize)
return -1;
//插入位置无效 返回-2
if(i<1||i>L.length+1)
return -2;
//插入元素 从后进行+1
for(int j = L.length; j >= i; j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return 1;
}
//初始化线性表
void ListInit(SqList &L, int n)
{
int temp;
for (int i=1;i<=n;i++)
{
cin>>temp;
ListInsert(L,i,temp);
}
}
void print_SQ(SqList L)
{
for(int i = 0; i < L.length - 1; i++)
cout<<L.data[i]<<" ";
cout<<L.data[L.length-1];
}
int main()
{
SqList A,B;
A.length=0;
B.length=0;
int num_a,num_b; //A和B分别有几个数字
int tem; //当前输入的数字
//数据输入
cin>>num_a;
ListInit(A,num_a);
cin>>num_b;
ListInit(B,num_b);
//求交集
SqList C;
C.length=0;
int i=0,j=0,k=0;
while(i<A.length && j<B.length){
if(A.data[i] == B.data[j])
{
C.data[k] = A.data[i];
++C.length;
++i;
++j;
++k;
}
else if(A.data[i] < B.data[j])
++i;
else
++j;
}
cout<<C.length<<endl;
if(C.length)
print_SQ(C);
}
c
#include
using namespace std;
#define MaxSize 50
//定义线性表
typedef struct{
int data[MaxSize];
int length;
}SqList;
int ListInsert(SqList &L,int i,int e)
{
//线性表长度大于给定maxsize 返回-1
if(L.length>=MaxSize)
return -1;
//插入位置无效 返回-2
if(i<1||i>L.length+1)
return -2;
//插入元素 从后进行
for(int j = L.length; j >= i; j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return 1;
}
void print_SQ(SqList L)
{
for(int i = 0; i < L.length - 1; i++)
cout<<L.data[i]<<" ";
cout<<L.data[L.length-1];
}
int main()
{
SqList A,B;
A.length=0;
B.length=0;
int num_a,num_b; //A和B分别有几个数字
int tem; //当前输入的数字
//数据输入
cin>>num_a;
for(int i=1;i<=num_a;i++)
{
cin>>tem;
ListInsert(A,i,tem);
}
cin>>num_b;
for(int i=1;i<=num_b;i++)
{
cin>>tem;
ListInsert(B,i,tem);
}
//求交集
SqList C;
C.length=0;
int i=0,j=0,k=0;
while(i<A.length && j<B.length){
if(A.data[i] == B.data[j])
{
C.data[k] = A.data[i];
++C.length;
++i;
++j;
++k;
}
else if(A.data[i] < B.data[j])
++i;
else
++j;
}
cout<<C.length<<endl;
if(C.length)
print_SQ(C);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)