有序集合的交运算

有序集合的交运算,第1张

【题目】

假设以两个元素依次递增有序排序排列的线性表 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);
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/585253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存