数据结构 已知两个链表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中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。(代的主要内容,如果未能解决你的问题,请参考以下文章

线性表练习之Example009-求两个有序递增链表的差集

数据结构算法实现:利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A并B。

数据结构:已知递增有序的单链表A,B

计导作业链表——差集与交集

HDU 1412 {A} + {B}

HDU 1412 {A} + {B}