顺序表的差集与交集
#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;
}
顺序表的交集与差集
最新推荐文章于 2023-04-01 18:42:53 发布