数据结构 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。(代
Posted Aiden (winner)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。(代相关的知识,希望对你有一定的参考价值。
分析:
求两个集合A和B的差集是指A中删除A和B中共有的元素,即删除表中的相应结点,所以要保存待删除结点的前驱,使用指针pre指向前驱结点。pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较。当两个链表La和Lb均为到达表尾结点时,如果La表中的元素小于Lb表中的元素,pre置为La表的工作指针pa删除Lb表中的元素,此表的工作指针后移。当链表La和Lb有一个为空,依次删除另一个非空表中的所有元素。
void Difference(LinkList& La,LinkList& Lb,LinkList& Lc)
//差集的结果存储于单链表La中,*n是结果集合中的个数,调用时为0
pa=La->next;
pb=Lb->next;
//pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点
pre=La; //pre为La中pa所指结点的前驱结点的指针
while(pa&&pb)
if(pa->data<pb->data)
pre=pa;
pa=pa->next;
*n++;
//A链表中当前结点指针后移
else if(pa->data>q->data)
q=q->next; //B链表中当前结点指针后移
else
pre->next=pa->next; //处理A,B元素值相同的结点,应删除
u=pa;
pa=pa->next;
delete u; //删除结点
以上是关于数据结构 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。(代的主要内容,如果未能解决你的问题,请参考以下文章