【急求】用带头单链表存储结构表示两个集合A、B(集合A、B都是有序递增的情况)实现集合求并集C的运算
发布网友
发布时间:2022-05-03 01:22
我来回答
共2个回答
热心网友
时间:2023-10-10 09:42
//无头链表
//#define data data_int
#include "head.h"
struct LNode{
// char data[10];
int data;
struct LNode *next;
};
typedef struct LNode * LinkList;
void InitList_L(LinkList &L)//链表构造函数
{
L=new LNode;
L->next=NULL;
}
void PrintList_L(LinkList &H)//链表显示函数
{
LinkList L=H;
L=L->next;
while(1)
{
cout<<"data value is "<<L->data<<endl;
L=L->next;
if (L==NULL)
return;
}
}
void Insert_L(LinkList &H,int n=0)//插入链表
{
LinkList L=H;
LinkList p=L;
int i=0;
if (n==0)
{
n=1;
while(p->next!=NULL)
{
p=p->next;
n++;
}
}
else if (n<1)
{
cout<<"error"<<endl;
return;
}
for (i=0;i<n-1;i++)
{
if (L->next==NULL)
{
cout<<"error"<<endl;
return;
}
L=L->next;
}
p=new LNode;
cout<<"please input a value:";
cin>>p->data;
p->next=L->next;
L->next=p;
}
LinkList bing_LinkList(LinkList a,LinkList b)
{
LinkList c;
LinkList nc;
LinkList t;
InitList_L(c);
nc=c;
a=a->next;
while (a!=NULL)//复制a到c
{
t=new LNode;
t->data=a->data;
nc->next=t;
t->next=NULL;
nc=nc->next;
a=a->next;
}
b=b->next;
while (b!=NULL)
{
nc=c;
while (nc->next!=NULL)
{
if (nc->next->data==b->data)
break;
nc=nc->next;
}
if (nc->next==NULL)
{
t=new LNode;
t->data=b->data;
nc->next=t;
t->next=NULL;
nc=nc->next;
}
b=b->next;
}
return c;
}
void main()
{
LinkList a,b,c;
int i=0;
InitList_L(a);
cout<<"\nI will input date."<<endl;
for (i=1;i<=3;i++)
Insert_L(a,i);
// PrintList_L(a);
InitList_L(b);
cout<<"\nI will input date."<<endl;
for (i=1;i<=3;i++)
Insert_L(b,i);
// PrintList_L(b);
c=bing_LinkList(a,b);
PrintList_L(c);
}
热心网友
时间:2023-10-10 09:42
#include "iostream.h"
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
typedef LNode *LinkList;
void InitList_L(LinkList &L)
{
L=new LNode;
L->next=NULL;
}
void ListInsert_L(LinkList &L, int i, int e)
{
int j;
LinkList p,s;
p=L;
j=0;
while(p&&(j<i-1)){p=p->next;++j;}
if(!p||(j>i-1)) cout<<"输入的i值不合理!"<<endl;
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
}
int ListLength_L(LinkList L){
int count;
LinkList p;
p=L;count=0;
while(p->next){count++;p=p->next;}
return count;
}
void MergeList_L(LinkList A,LinkList B,LinkList &C)
{
LinkList pa,pb,pc,r;
C=new LNode;
C->next=NULL;
r=C;
pa=A->next;
while(pa)
{
pc=new LNode;
pc->next=NULL;
pc->data=pa->data;
r->next=pc;
r=pc;
pa=pa->next;
}
pb=B->next;
while(pb)
{
pa=A->next;
while(pa)
{
if(pa->data==pb->data)
break;
pa=pa->next;
}
if(pa==NULL)
{
pc=new LNode;
pc->next=NULL;
pc->data=pb->data;
r->next=pc;
r=pc;
}
pb=pb->next;
}
}
void print(LinkList &L)
{
cout<<endl;
LinkList p;
p=L;
p=p->next;
while(p)
{ cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void main()
{
int i;
int a[5]={1,2,5,8,9};
int b[5]={2,3,4,5,7};
LinkList A,B,C;
InitList_L(A);
InitList_L(B);
for(i=0;i<5;i++)
ListInsert_L(A,i+1,a[i]);
print(A);
for(i=0;i<5;i++)
ListInsert_L(B,i+1,b[i]);
print(B);
MergeList_L(A,B,C);
print(C);
}