您的位置:首页 > 其它

用顺序表调整la的左右两边,左边元素全部为奇数,右边元素全部为偶数

2015-10-02 12:12 483 查看
//#include "SqList.h"
#include<iostream>
using namespace std;
const int Default=20;
enum StatusCode{SUCCESS,RANGE_ERROR,OVER_FLOW};
template<class ElemType>
class SqList
{
protected:
int count;
int maxSize;
ElemType *ptr;

void Init(int size);
bool Full()const;
public:
SqList(int size=Default);//注意构造函数不能声明为保护类型,否则在类外构造类时候,不能成功
virtual ~SqList();//析构函数一定要定义为虚函数,否则有继承类时不能完全析构

bool Empty()const;
void Clear();
void Traverse(void(* visit)(ElemType &e))const;
int Length()const;

StatusCode GetElem(int position,ElemType &e)const;
StatusCode SetElem(int position,const ElemType &e);
StatusCode Delete(int position,ElemType &e);
StatusCode Insert(int position,const ElemType &e);

SqList(const SqList<ElemType> ©);
SqList<ElemType> & operator = (const SqList<ElemType> ©);
};

template<class ElemType>
int SqList<ElemType>::Length()const
{
return count;
}
template<class ElemType>
void SqList<ElemType>::Init(int size)
{
maxSize=size;
if(ptr!=NULL)
delete []ptr;
else
ptr=new ElemType[maxSize];
count=0;
}

template<class ElemType>
SqList<ElemType>::SqList(int size)
{
ptr=NULL;
Init(size);
}

template<class ElemType>
SqList<ElemType>::~SqList()
{
delete []ptr;
}

template<class ElemType>
void SqList<ElemType>::Clear()
{
count=0;
}

template<class ElemType>
bool SqList<ElemType>::Empty()const
{
return count==0;
}

template<class ElemType>
bool SqList<ElemType>::Full()const
{
return count==maxSize;
}

template<class ElemType>
void SqList<ElemType>::Traverse(void(* visit)(ElemType &e))const
{
for(int curPosition=0;curPosition<count;curPosition++)
(* visit)(ptr[curPosition]);
}

template<class ElemType>
StatusCode SqList<ElemType>::SetElem(int position,const ElemType &e)
{
if(position<1||position>count)
return RANGE_ERROR;
else
{
ptr[position-1]=e;
return SUCCESS;
}
}

template<class ElemType>
StatusCode SqList<ElemType>::GetElem(int position,ElemType &e)const
{
if(position<1||position>count)
return RANGE_ERROR;
else
{
e=ptr[position-1];
return SUCCESS;
}
}

template<class ElemType>
StatusCode SqList<ElemType>::Delete(int position,ElemType &e)
{
if(position<1||position>count)
return RANGE_ERROR;
else
{
e=ptr[position-1];
for(int curPosition=position-1;curPosition<count;curPosition++)
ptr[curPosition]=ptr[curPosition+1];
--count;
return SUCCESS;
}
}

template<class ElemType>
StatusCode SqList<ElemType>::Insert(int position,const ElemType &e)
{
//	cout<<e<<" ";
if(Full())
return OVER_FLOW;
else if(position+1<2||position>count+1)
return RANGE_ERROR;
else
{
count++;
for(int curPosition=count;curPosition>=position;curPosition--)
ptr[curPosition]=ptr[curPosition-1];
ptr[curPosition]=e;
//	cout<<curPosition<<" ";
//	cout<<ptr[curPosition]<<" "<<endl;
return SUCCESS;
}
}

template<class ElemType>
SqList<ElemType>::SqList(const SqList<ElemType>& copy)
{
init(copy.maxSize);
count=copy.maxSize;
for(int curPosition=0;curPosition<count;curPosition++)
ptr[curPosition]=copy.ptr[curPosition];
}

template<class ElemType>
SqList<ElemType> &SqList<ElemType>::operator = (const SqList<ElemType> ©)
{
if(this!=©)//注意©
{
init(copy.maxSize);
count=copy.maxSize;
for(int curPosition=0;curPosition<count;curPosition++)
ptr[curPosition]=copy.ptr[curPosition];
}
return *this;
}

template<class ElemType>
void Adjust(SqList<ElemType> &la)
{
int aPosition=1;
int bPosition=la.Length();
ElemType aElem,bElem;
while(aPosition<bPosition)
{
la.GetElem(aPosition,aElem);
la.GetElem(bPosition,bElem);
if(aElem%2==1)
aPosition++;
else if(bElem%2==0)
bPosition--;
else
{
la.SetElem(aPosition,bElem);
la.SetElem(bPosition,aElem);
aPosition++;
bPosition--;
}
}
}

void main()
{
SqList<int> la;
int aElem;
la.Insert(la.Length()+1,2);
la.Insert(la.Length()+1,6);
la.Insert(la.Length()+1,5);
la.Insert(la.Length()+1,8);
la.Insert(la.Length()+1,7);
Adjust<int>(la);
for(int curPosition=1;curPosition<=la.Length();curPosition++)
{
la.GetElem(curPosition,aElem);
cout<<aElem<<" ";
}
cout<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: