数据结构与算法 p45-02
设A={a1,a2,a3......an}和B={b1,b2,b3...bn}均为顺序表,A‘和B’分别为A和B中除去最大共同前缀后的子表
若A'=B'=空表,则A=B;若A'=空表,而B'!=空表,或者两者均不为空表,且A'的表首元素小于B的表首元素
则A<B;否则A>B.
#include<iostream>//cout,cin
using namespace std;
typedef int T;
//类的定义
template <class T>
class SqList //顺序表类
{
private:
T *elem; //表首址
int length; //表长
int listsize;//表容量
public:
SqList(int m);//构造函数, 创建容量为m的空表
~SqList();//析构函数,删除表空间
void CreateList(int n);//创建具有n个元素的线性表
void Delete (int i);
T GetElem(int i);//获取第i个元素的值
int Length();
void ListDisp();//输出表元素
};
//类的实现
template<class T>
SqList<T>::SqList(int m)
{//构建函数,创建一表容量为m的空表
elem=new T[m];// 申请表空间
length=0;// 空表,表长为0
listsize=m;//表容量为m
}
template<class T>
SqList<T>::~SqList()//析构函数
{//释放表空间
delete [] elem;
length=0;
listsize=0;
}
template<class T>
void SqList<T>::CreateList(int n)
{//创建表长度为n的顺序表
int step,begin;
cout<<"请依次输入初值和步长:"<<endl;
cin>>begin>>step;
for(int i=1;i<=n;i++)
elem[i-1]=begin+(i-1)*step;
length=n;
}
template <class T>
void SqList<T>::Delete (int i)
{// 删除表中第i个位置元素,如不能删除,显示异常信息。
for(int j=i;j<length;j++)
elem[j-1]=elem[j];
length--;
}
template<class T>
T SqList<T>::GetElem(int i)
{//获取第i个元素的值
T e;
e=elem[i-1];
return e;
}
template <class T>
int SqList<T>::Length()
{//返回表长
return length;
}
template <class T>
void SqList<T>::ListDisp()
{//显示表内容
for(int i=0;i<length;i++)
{
cout<<elem[i]<<"\t";
}
cout<<endl;
}
//主函数
int main()
{
int la,lb;
SqList<int> La(30);
SqList<int> Lb(30);
cout<<"请输入要创建的顺序表La中元素个数:";
cin>>la;
cout<<endl;
La.CreateList(la);
La.ListDisp();
cout<<endl;
cout<<"请输入要创建的顺序表Lb中元素个数:";
cin>>lb;
Lb.CreateList(lb);
Lb.ListDisp();
cout<<endl;
T a,b;
for(int i=1;i<=la;i++)
{
a=La.GetElem(i);
for(int j=1;j<=lb;j++)
{
b=Lb.GetElem(j);
if(a<b)
break;
if(a==b)
{
La.Delete(i);
Lb.Delete(j);
}
}
}
int a_length=La.Length();
int b_length=Lb.Length();
T A=La.GetElem(1);
T B=Lb.GetElem(1);
if(A<B)
cout<<"A<B";
else if(A>B)
cout<<"A>B";
else
cout<<"A=B";
cout<<endl;
return 0;
}