单链表的应用--利用单链表求两个集合的交集

  利用单链表求两个集合的交集,利用前文写好的链表的框架,在链表类中补充Intersection方法。

利用单链表两个集合的交集

  • 一、问题分析
  • 二、代码分析
    • 1.链表类LinkList
    • 2.链表方法Intersection
  • 三、测试代码
    • 1.主函数
    • 2.输出结果
  • 四、源代码获取(免积分)

一、问题分析

  利用单链表两个集合的交集。

二、代码分析

  使用单链表first1和单链表first2实现求集合的交集,用指针p指向first1的首元节点,判断其在first2中是否出现过,如果出现过,则输出p->data;后移p,直到first1中所有元素点都被判断一遍为止。

1.链表类LinkList

  在链表类中声明Union方法。

/*位于LinkList.h文件中*/
template <class ElemType>
class LinkList{
	public:
		LinkList();//构造函数 
		~LinkList();//析构函数 
		void Insert(int i ,ElemType x);//插入函数 
		void PrintList();//打印所有元素  
		int Length();//获取链表长度
		ElemType Get(int i) ;//按位查找,返回第i个元素的值
		int Locate(ElemType x) ;//按值查找,返回x在单链表中的位置
		ElemType Delete(int i) ;//删除第i个元素 
		Node<ElemType>* GetFirst(){return first;};
		void Intersection(LinkList<ElemType>& L) ;
	private:
		Node<ElemType>* first; //头指针 
}; 

2.链表方法Intersection

/*位于LinkList.cpp文件中*/
template <class ElemType>
void LinkList<ElemType>::Intersection(LinkList<ElemType>& L)
{
	Node<ElemType>* L1_First=this->first;
	Node<ElemType>* p=L1_First->next;
	while(p!=NULL)
	{
		/*在L2中查找p的数据是否存在*/
		int i=L.Locate(p->data) ;
		//如果存在,则输出,直到L1遍历结束 
		if(i!=0)
		{
			cout<<p->data<<" ";
		}
		p=p->next;
	}
	cout<<endl;
}

三、测试代码

1.主函数

#include 
#include "LinkList.h"
#include "LinkList.cpp" 

using namespace std;

int  main() {
	LinkList<int> L1;
	/*插入元素*/
	L1.Insert(1,1);
	L1.Insert(2,2);
	L1.Insert(3,3);
	L1.Insert(4,4);
	L1.Insert(5,7);	
	L1.Insert(6,10);	
	
	cout<<"L1链表数据:" <<endl;
	L1.PrintList();
	
	LinkList<int> L2;
	/*插入元素*/
	L2.Insert(1,1);
	L2.Insert(2,3);
	L2.Insert(3,4);
	L2.Insert(4,6);
	L2.Insert(5,8);	
	L2.Insert(6,11);	
	
	cout<<"\nL2链表数据:" <<endl;
	L2.PrintList();
	
	cout<<"\nL1和L2的并集:"<<endl;
	L1.Intersection(L2);
	//L1.PrintList();	
	return 1; 
}

2.输出结果

L1链表数据:
1 2 3 4 7 10
L2链表数据:
1 3 4 6 8 11
L1和L2的交集:
1 3 4

四、源代码获取(免积分)

利用单链表实现两个集合的交集

你可能感兴趣的:(数据结构C++边学边做,数据结构,c++,单链表,交集)