#include<iostream>
using namespace std;
#include<math.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;
int ListLength (LinkList L)
{
LinkList p = L; int j = 0;
while(p->next){
p = p->next; ++j;
}
return j;
return OK;
}
Status ListInsert_L(LinkList &L, int i, int e)
{
if(i < 1 || i > ListLength(L)+1) return ERROR;
LinkList p = L; int j = 0;
while ( j<i-1 ) { p = p->next; ++j; }
LinkList s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
Status GetElem_L(LinkList L, int i, int &e)
{
if(i < 1 || i > ListLength(L)) return ERROR;
LinkList p = L->next; int j = 1;
for(;j<i;) {p = p->next; ++j;}
e = p->data;
return OK;
}
int Locatead(LinkList L,int e){
LinkList p;
p=L->next;
while(p){
if(p->data==e){
return 1;
}
p=p->next;
}
return 0;
}
Status ListDelete_L(LinkList &L, int i,int &e){
if(i < 1 || i > ListLength(L)) return ERROR;
LinkList p = L; int j = 0;
while ( j<i-1 ) { p = p->next; ++j; }
//p指向第i-1个结点
LinkList q=p->next; //临时保存被删结点的地址以备释放
e=q->data;
p->next=q->next; //改变被删结点前驱结点的指针域
delete q; //释放删除结点的空间
return OK;
}
//输出函数
void Print(LinkList L){
LinkList p=L->next;
// int Ll=ListLength(L);
while(p){
cout<<p->data<<" ";
p=p->next;
}
}
// 并集函数
void SumList(LinkList &La,LinkList &Lb){
int Lal=ListLength(La);
int Lbl=ListLength(Lb);
LinkList pa=La->next,pb=Lb->next;
int i=1,e;
for(int i=1;i<=Lbl;i++){
GetElem_L(Lb,i,e);
while(!Locatead(La,e)){
ListInsert_L(La,Lal++,e);
}
}
}
//交集函数
void jiaoList(LinkList &Lc,LinkList &Ld){
int cl=ListLength(Lc);
int dl=ListLength(Ld);
LinkList pc=Lc->next;
LinkList pd=Ld->next;
int i,e;
for(int i=1;i<=dl;i++){
GetElem_L(Ld,i,e);
if(!Locatead(Lc,e)){
ListDelete_L(Lc,i,e);
}
}
}
//大整数相加函数
int BigsumList(LinkList &Le,LinkList &Lf){
int el=ListLength(Le);
int fl=ListLength(Lf);
int m=pow(10,el-1);
int n=pow(10,fl-1);
int sum1=0,sum2=0;
LinkList pe=Le->next;
LinkList pf=Lf->next;
for(int i=1;i<=el;i++){
sum1+=(pe->data)*m;
m=m/10;
pe=pe->next;
}
for(int i=1;i<=fl;i++){
sum2+=(pf->data)*n;
n=n/10;
pf=pf->next;
}
int s=sum1+sum2;
return s;
}
int main()
{
LinkList La,Lb;
int e;
La=new LNode;
Lb=new LNode;
La->next=NULL;
Lb->next=NULL;
// 输入La和Lb的值
ListInsert_L(La,1,20);
ListInsert_L(La,2,30);
ListInsert_L(La,3,15);
ListInsert_L(Lb,1,12);
ListInsert_L(Lb,2,18);
// 调用并集函数
SumList(La,Lb);
cout<<"La和Lb的交集为:\n";
Print(La);
cout<<"\n";
LinkList Lc,Ld;
Lc=new LNode;
Ld=new LNode;
Lc->next=NULL;
Ld->next=NULL;
// 输入Lc和Ld的值
ListInsert_L(Lc,1,20);
ListInsert_L(Lc,2,30);
ListInsert_L(Lc,3,15);
ListInsert_L(Ld,1,12);
ListInsert_L(Ld,2,30);
ListInsert_L(Ld,3,15);
ListInsert_L(Ld,4,18);
//调用交集函数
jiaoList(Lc,Ld);
cout<<"Lc和Ld的的交集为:\n";
Print(Lc);
cout<<"\n";
LinkList Le,Lf;
Le=new LNode; //new一个新结点
Lf=new LNode;
Le->next=NULL; //新结点置空
Lf->next=NULL;
//输入Le和Lf的值
ListInsert_L(Le,1,2);
ListInsert_L(Le,2,3);
ListInsert_L(Le,3,4);
ListInsert_L(Lf,1,1);
ListInsert_L(Lf,2,1);
ListInsert_L(Lf,3,2);
// 调用大整数相加函数
int s=BigsumList(Le,Lf);
cout<<"大整数相加和为:\n";
cout<<s<<endl;
return 0;
}
标签:LinkList,LB,ListInsert,并集,La,int,next,链表,Lc From: https://blog.csdn.net/2301_80777156/article/details/143033263