#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