用顺序表调整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; }
相关文章推荐
- uva12167等价性证明
- Debug---Eclipse断点调试基础
- lamp搭建phpMyAdmin+wordpress+Discuz 推荐
- 静态代码块-非静态代码块-默认构造方法
- Git 使用GitHub
- pat1002A+B for Polynomials (25)
- WERTYU
- JavaScript权威指南学习之第4章 表达式和运算符
- 判断浮点数是否等于0
- Git 操作标签
- JQuery的Ajax()向后台传参方式
- 文章标题
- 三大框架学习之----struts2 通配符的使用(二)
- 可视化编程
- How many Fibs?(java)
- Memcached完全解剖–1. memcached基金会
- 纯数字验证码
- java篇 【11】Java中常用的内存区域
- NFS java 操作和SMB服务器的操作
- 【软件工程】第三章 需求分析定义