首页 > 其他分享 >顺序表实现 表LA和表LB的并集、交集、大整数相加

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

时间:2024-10-19 11:47:13浏览次数:3  
标签:LB cout LA int 和表 length SqList LC

#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;

}

标签:LB,cout,LA,int,和表,length,SqList,LC
From: https://blog.csdn.net/2301_80777156/article/details/143067460

相关文章

  • 链表实现两个链表LA和LB的交集、并集、大整数相加
    #include<iostream>usingnamespacestd;#include<math.h>#defineOK1#defineERROR0typedefintStatus; typedefstructLNode{    intdata;      structLNode*next;     }LNode,*LinkList;   intListLength(LinkListL)......
  • Image Manipulation
    Homework07Due: 6:00pm,Tuesday,October23,2024 DueDate:SubmityoursolutionstoGradescopeby6:00pm,Tuesday,October23. PLEASEbesuretousepropernamingconventionsforthefiles,classes,andfunctions. WewillNOTchangeanythingtor......
  • HDLBits中文版,标准参考答案 | 3.3 Building Larger Circuits | 构建更大的电路
    关注 望森FPGA 查看更多FPGA资讯这是望森的第21期分享作者|望森来源|望森FPGA目录1Counterwithperiod100024-bitshiftregisteranddowncounter3FSM:Sequence1101recognizer4FSM:Enableshiftregister5FSM:ThecompleteFSM6Thecomplet......
  • Golang笔记_day09
    Go面试题(二)1、怎么做代码优化减少内存分配        内存分配是任何程序的基本操作之一,也是一个明显的性能瓶颈。在Golang中,减少内存分配是一种有效的代码优化方式。为了减少内存分配,我们可以使用以下技巧:复用变量:在循环或迭代过程中,尽量避免重新分配变量。通过在循......
  • 数学建模与数学实验习题4.4.2答案matlab
    炼油厂将ABC三种原油加工成甲乙丙三种汽油,一桶原油加工成一桶汽油的费用为4元,每天至多能加工汽油14000桶,原油的买入价,买入量,辛烷值,硫的含量以及汽油的卖出价,需求量辛烷值和硫含量由下表给出,如何安排生产计划使利润最大一般来说,做广告可以增加销售,估计一天向一种汽油投......
  • [Mybatis Plus]lambdaQueryWrapper和QueryWrapper的选择
    结论更推荐使用:LambdaQueryWrapperQueryWrapper:灵活但是不够类型安全LambdaQueryWrapper:安全分析在MyBatis-Plus中,QueryWrapper和LambdaQueryWrapper都是用来构建查询条件的工具类。它们都提供了链式调用的方式来构造SQL语句中的WHERE条件部分,但是两者之间存在一些差异。......
  • IPMI(智能平台管理接口,Intelligent Platform Management Interface)是一种行业标准的接
    IPMI(智能平台管理接口,IntelligentPlatformManagementInterface)是一种行业标准的接口规范,主要用于服务器和计算机系统的管理。它提供了硬件监控和管理功能,使管理员能够远程监控和控制计算机系统。以下是IPMI的一些主要特点和功能:主要特点硬件监控:IPMI能够监控系统的硬件状态......
  • sql-labs靶场第十七关测试报告
    目录一、测试环境1、系统环境2、使用工具/软件二、测试目的三、操作过程1、寻找注入点2、注入数据库①寻找注入方法②爆库,查看数据库名称③爆表,查看security库的所有表④爆列,查看users表的所有列⑤成功获取用户名和密码信息3、sqlmap注入方法①爆库②爆表③爆......
  • sql-labs靶场第十六关测试报告
    目录一、测试环境1、系统环境2、使用工具/软件二、测试目的三、操作过程1、寻找注入点2、注入数据库①寻找注入方法②爆库,查看数据库名称③爆表,查看security库的所有表④爆列,查看users表的所有列⑤成功获取用户名和密码信息3、sqlmap注入方法①爆库②爆表③爆......
  • Matlab 生成“少帅下飞机”粒子边缘特效(附源代码)
    这里是使用Matlab生成的“少帅下飞机”粒子边缘特效,大家也可以去尝试一下,文末附视频素材和源码,需要Matlab下载教程的可以私信后台哦!本期视频素材及matlab源码下载链接:https://pan.quark.cn/s/37f034f9a180此处改为自己的文件路径即可%读取视频videoFile="D:\少帅下飞......