顺序表的交集与差集

顺序表的差集与交集

#include <iostream>
using namespace std;
const int MaxSize=100;			//顺序表的大小
template <typename T>	class SqList;	
template <typename T>	void chaji(SqList<T> &a,SqList<T> &b);
template <typename T>	void jiaoji(SqList<T> &a,SqList<T> &b);
template <typename T>
class SqList					//顺序表类
{
	T *data;						//存放顺序表中元素
	int length;   					//存放顺序表的长度
public:
	SqList();					//构造函数
	~SqList();					//析构函数
	void CreateList( );	   //建立顺序表,当输入为-1时,结束输入
	void DispList();				//输出顺序表L中所有元素
	int ListLength();				//求顺序表的长度
	bool GetElem(int i, T &e);		//求顺序表中某序号的元素值
	int LocateElem(T e);			//按元素值查找其序号
	bool ListInsert(int i, T e);	//插入数据元素
	bool ListDelete(int i);			//删除数据元素
	friend void chaji<>(SqList<T> &a,SqList<T> &b);	//求两个顺序表的差集
	friend void jiaoji<>(SqList<T> &a,SqList<T> &b);//求两个顺序表的交集
};

//-----------------顺序表的基本运算算法--------------------------------
template <typename T>
SqList<T>::SqList()	//构造函数
{
	data=new T[MaxSize];		//为data分配长度为MaxSize的空间
	length=0;					//初始时置length为0
}
template <typename T>
SqList<T>::~SqList()	//析构函数
{
	delete [] data;				//释放空间
}
template <typename T>
void SqList<T>::CreateList()	//建立顺序表,当输入为-1时,顺序表输入结束
{
	int n=0,i=0;
	while(n!=-1)
	{
		cin>>n;
		if(n!=-1)
			data[i++]=n;
	}
	length=i;
}
template <typename T>
void SqList<T>::DispList()		//输出顺序表中所有元素
{	int i;
	if (length > 0)
	{
		for (i=0; i<length; i++)	//扫描顺序表中各元素值
			cout << data[i] << " ";
		cout << endl;
	}
}
template <typename T>
int SqList<T>::ListLength()		//求顺序表的长度
{
	return length;
}
template <typename T>
bool SqList<T>::GetElem(int i, T &e)	//求顺序表中某序号的元素值
{	if (i < 1 || i > length)
		return false;					//参数错误时返回false
	e=data[i - 1];					//取元素值
	return true;						//成功找到元素时返回true
}
template <typename T>
int SqList<T>::LocateElem(T e)		//按元素值查找其序号
{	int i=0;
	while (i < length && data[i]!=e)
		 i++;							//查找元素e
	if (i>=length)						//未找到时返回0
		return 0;
	else
		return i + 1;					//到后返回其逻辑序号
}
template <typename T>
bool SqList<T>::ListInsert(int i, T e)		//插入数据元素
{
	int j;
	if(i<1||i>length+1)
		return false;
	for(j=length;j>=i;j--)
		data[j] = data[j-1];
	data[i-1]=e;
	length++;
	return true;

}
template <typename T>
bool SqList<T>::ListDelete(int i)	//删除数据元素
{
    int j;
	if(i<1||i>length+1)
		return false;
	for(j=i-1;j<length-1;j++)
		data[j] = data[j+1];
	length--;
	return true;
}


template <typename T>
void chaji(SqList<T> &a,SqList<T> &b)
{
  	T e;
	for(int i = 1;i <= a.ListLength();i++)
	{
		a.GetElem(i,e);
		if(b.LocateElem(e) != 0)
		{
			a.ListDelete(i);
			i--;
		}
	}
}
template <typename T>
void jiaoji(SqList<T> &a,SqList<T> &b)
{
	T e;
	for(int i = 1;i <= a.ListLength();i++)
	{
		a.GetElem(i,e);
		if(b.LocateElem(e) == 0)
		{
			a.ListDelete(i);
			i--;
		}
	}
}

int main()
{
    SqList<int> L1;
	SqList<int> L2;
	SqList<int> L3; 
	//int n1,i,n2,j;
	cout<<"请输入L1:"<<endl;
	L1.CreateList();
	cout<<"请输入L2:"<<endl;
	L2.CreateList();
	//cout<<"其差集为:"
	//chaji(L1,L2);
	//L1.DispList();
	cout<<"其交集为:"<<endl;
	jiaoji(L1,L2);
	L1.DispList();
	system("pause");
    return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值