数据结构与算法 p45-08
已知两个元素按值递增有序排列的线性表A和B,且同一表中的元素值各不相同。
试构造一个线性表C,其为A和B中的元素的交集,且表C中的元素也按值递增有序排列
A,B,C都是单链表表时
http://blog.csdn.net/weimengnvbianba/article/details/15029911
A,B,C都是顺序表时
#include<iostream.h>
typedef int T;
template <class T>
class SqList
{
private:
T *elem;
int length;
int listsize;
public:
SqList(int m) ;
~SqList();
void CreateList(int n);
void createList(int n,int a[]);
T GetElem(int i);
void ListDisp();
};
template<class T>
SqList<T>::SqList(int m)
{
elem=new T[m];
length=0;
listsize=m;
}
template<class T>
SqList<T>::~SqList()
{
delete [] elem;
length=0;
listsize=0;
}
template<class T>
void SqList<T>::CreateList(int n)
{
T i=0,k,start;
cout<<"请输入初始值及步长:";
cin>>start>>k;
for(i=0;i<n;i++)
elem[i]=start+k*i;
length=n;
}
template<class T>
void SqList<T>::createList(int n,int a[])
{
for(int i=0;i<n;i++)
elem[i]=a[i];
length=n;
}
template<class T>
T SqList<T>::GetElem(int i)
{
T e;
e=elem[i];
return e;
}
template <class T>
void SqList<T>::ListDisp()
{
for(int i=0;i<length;i++)
{
cout<<elem[i]<<" ";
}
cout<<endl;
}
int main()
{
int i,t=0;
int a[20];
T ea,eb;
SqList<int> La(20),Lb(20),Lc(20);
int la_len,lb_len;
cout<<"请输入要创建A集合中元素个数:";
cin>>la_len;
cout<<endl;
La.CreateList(la_len);
cout<<"La:"<<"\t";
La.ListDisp();
cout<<endl<<"请输入要创建的B集合中元素个数:";
cin>>lb_len;
cout<<endl;
Lb.CreateList(lb_len);
cout<<"Lb:"<<"\t";
Lb.ListDisp();
for(i=0;i<la_len;i++)
{
ea=La.GetElem(i);
for(int j=0;j<lb_len;j++)
{
eb=Lb.GetElem(j);
if(La.GetElem(i)<Lb.GetElem(j))
break;
if(La.GetElem(i)==Lb.GetElem(j))
{
a[t]=Lb.GetElem(j);
t++;
}
}
}
Lc.createList(t,a);
cout<<endl<<"表A和表B的交集表C的元素如下:"<<endl;
cout<<"Lc:"<<"\t";
Lc.ListDisp();
cout<<endl;
return 0;
}