已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。

xiaoxiao2025-04-07  9

语言:C++

#include <iostream> using namespace std; typedef struct LNode { int data; LNode *next; }LNode,*LinkList; //创建链表 int CreateList(LinkList &L,int n) { LNode *p,*r;int i; L=new LNode; L->next=NULL; r=L; for(i=0;i<n;i++) { p=new LNode; cin>>p->data; p->next=NULL;r->next=p; r=p; } return 0; } //输出链表 void display(LinkList L) { LNode *p; p=L->next; cout<<"{"; while(p) {cout<<p->data<<" "; p=p->next;} cout<<"}"<<endl; } //差集 int MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC) { LNode *pa;LNode *pb;LNode *pc;int count=0; pa=LA->next;pb=LB->next; LC=LA;pc=LC; while(pa&&pb) { if(pa->data<pb->data) { pc->next=pa; pc=pa; pa=pa->next; pc->next=NULL; count++; } else if(pa->data>pb->data) { pb=pb->next; } else { pa=pa->next; pb=pb->next; } } if(pa) { pc->next=pa; } while(pa) { count++; pa=pa->next; } delete LB; return count; } int main() { LinkList LA;LinkList LB;LinkList LC;int n;int i; cout<<"请输入需要创建的A集合元素的个数:"<<endl; cin>>n; cout<<"请依次输入需要存入的数据(尾插法&&递增):"<<endl; CreateList (LA,n); cout<<"请输入需要创建的B集合元素的个数:"<<endl; cin>>n; cout<<"请依次输入需要存入的数据(尾插法&&递增):"<<endl; CreateList (LB,n); cout<<"集合A为:"; display(LA); cout<<"集合B为:"; display(LB); MergeList_L(LA,LB,LC); cout<<"二者的差集为:"; display(LC); i=MergeList_L(LA,LB,LC); cout<<"该几个元素的个数为:"<<i<<"个"<<endl; return 0; }

 

转载请注明原文地址: https://www.6miu.com/read-5027727.html

最新回复(0)