顺序表实现 表LA和表LB的并集、交集、大整数相加

#include<iostream>

using namespace std;

#include<math.h>

#define MAXSIZE 100

#define ERROR 0

#define OK 1

typedef struct { //定义顺序表

    int *elem;

    int length;

} SqList;

typedef int Status;

 

void InitList(SqList &L) //创建顺序表

{

    L.elem = new int[MAXSIZE];

    L.length = 0;

}

int ListLength(SqList L) //求顺序表的长度

{

    return L.length;

}

void CreateList(SqList &L){ //输入数据元素 

    cin>>L.length;

    int i;

    for(i=0;i<L.length;++i){

        cin>>L.elem[i];

    }

}

 

Status GetElem(SqList L, int i, int &e) //求顺序表的第i个元素,并以e返回

{

    if (i<1||i>L.length) return ERROR;  

    e = L.elem[i - 1];

    return OK;

}

 

int LocateElem(SqList L, int e) //判断SqList里有没有e这个元素,并返回位置

{

    int i;

    for (i = 0; i < L.length; i++)

        if (e == L.elem[i])

            return i+1;

    return 0;

}

 

Status ListInsert(SqList &L,int i , int e){

   if(i<1 || i>L.length+1) return ERROR; //i值不合法

   if(L.length==MAXSIZE) return ERROR; //当前存储空间已满     

   int j;

   for(j=L.length-1;j>=i-1;j--) 

       L.elem[j+1]=L.elem[j]; //插入位置及之后的元素后移

    L.elem[i-1]=e; //将新元素e放入第i个位置

  ++L.length; //表长增1

  return OK;

}

 

Status ListDelete(SqList &L,int i, int &e){

   if((i<1)||(i>L.length)) return ERROR; //i值不合法

   int j;

   e=L.elem[i-1];

   for (j=i;j<=L.length-1;j++)        

       L.elem[j-1]=L.elem[j]; //前移

   --L.length; //表长减1

   return OK;

}

 

void ListOutput(SqList L) //输出SqList

{

    int i;

    for (i = 0; i < L.length; i++)

        cout << L.elem[i] << " ";

    cout << endl;

}

//并集函数 

void MergeList(SqList &LA, SqList LB) //算法2.14 线性表的合并(顺序表)

{

    //将所有在线性表LB中但不在LA中的数据元素插入到LA中

    int LA_len, LB_len, i, e;

    LA_len = ListLength(LA);

    LB_len = ListLength(LB); //求线性表的长度

    for (i = 1; i <= LB_len; i++) {

        GetElem(LB, i, e); //取LB中第i个数据元素赋给e

        if (!LocateElem(LA, e)) //LA中不存在和e相同的数据元素,则插入之

            ListInsert(LA, LA.length+1, e);

    }

} //unionSqList

//交集函数 

void JiaoList(SqList &LC,SqList &LD){

    int LC_l,LD_l,i,e;

    LC_l=ListLength(LC);

    LD_l=ListLength(LD);

    for(i=1;i<=LC_l;i++){

        GetElem(LC,i,e); //取Lc第i个元素赋值给e 

        if(!LocateElem(LD,e)){ //判断LD中元素是否与e相同,如果不相同,则删除LC中与e不相同的元素 

            ListDelete(LC,i,e); 

        }

    } 

 

//大整数相加函数

int SumList(SqList &LE,SqList &LF){

    int LE_l=ListLength(LE);

    int LF_l=ListLength(LF);

    int n1=pow(10,LE_l-1);

    int n2=pow(10,LF_l-1);

    int a=0,b=0;

     for(int i=0;i<LE_l;i++){

         a=a+LE.elem[i]*n1;

         n1=n1/10;

     }

     for(int j=0;j<LF_l;j++){

         b=b+LF.elem[j]*n2;

         n2=n2/10;

     }

     int sum=a+b;

     return sum;

 

int main() {

    SqList LA, LB;

    InitList(LA);

    InitList(LB);

    int i,e;

    cout<<"请输入LA长度和数据和LB的长度和数据"<<endl; 

    CreateList(LA);

    CreateList(LB);

    //调用并集函数 

    MergeList(LA, LB);

    ListDelete(LA,i,e); 

    cout << "LA和LB合并后的集合为:\n";

    ListOutput(LA);

    cout<<"\n";

    

    //调用交集函数

    cout<<"请输入LC和LD的长度和数据" ; 

    cout<<"\n";

    SqList LC,LD;

    InitList(LC);

    InitList(LD);

    CreateList(LC);

    CreateList(LD);

    JiaoList(LC,LD);

// ListDelete(LC,i,e);

    cout<<"LC和LD的交集为:\n";

    ListOutput(LC);

    cout<<"\n";

    

    //调用 大整数相加函数

    cout<<"请输入LE和LF的长度和数据" ;

    cout<<"\n"; 

    SqList LE,LF;

    InitList(LE);

    InitList(LF);

    CreateList(LE);

    CreateList(LF);

    cout<<"相加的结果为" ;

    int s=SumList(LE,LF);

    cout<<s<<endl;

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值