c++顺序表用类模板怎么创建,数据结构问题
利用顺序表实现给定一串数据去除重复的留下第一次出现的那个数,怎么实现?大神帮帮忙。
程序代码:
//SeqList.h #ifndef SEQLIST_H #define SEQLIST_H typedef int Status; template <class T> class SeqList { private: int length; int maxLength; T *elems; public: SeqList(int size = 0); SeqList(T v[],int n,int size = 0); ~SeqList(); int GetLength() const; bool IsEmpty () const; void Clear(); void Traverse(void (*Visit)(const T &)) const;//遍历顺序表 int LocateElem(const T &e) const;//元素定位,求指定元素在顺序表的位置 Status GetElem(int i,T &e) const;//取顺序表中的第i个元素 Status SetElem(int i,const T &e);//修改顺序表中的第i个元素 Status DeleteElem(int i,T &e);//删除顺序表中的第i个元素 Status InsertElem(int i,const T &e); //SeqList(const SeqList<T> &s);//复制构造函数 //SeqList<T> &operator= (const SeqList<T> &s);//赋值语句重载 }; #endif //SeqList.cpp #include"SeqList.h" template<class T> SeqList<T>::SeqList(int size ) { elems = new T[size]; maxLength = size; length = 0; } template<class T> SeqList<T>::SeqList(T v[],int n,int size) { elems = new T[size]; maxLength = size; length = n; for(int i = 0;i<length;i++) elems[i] = v[i]; } template<class T> SeqList<T>::~SeqList() { //if(elems) delete[] elems; } template<class T> int SeqList<T>::GetLength() const { return length; } template<class T> bool SeqList<T>::IsEmpty () const { if(length) return false; else return true; } template<class T> void SeqList<T>::Clear() { length = 0; } /* template<class T> void SeqList<T>::Traverse(void (*Visit)(const T &)) const//遍历顺序表 { for(int i = 0;i<length;i++) (*visit)(elems[i]); } */ template<class T> int SeqList<T>::LocateElem(const T &e) const //元素定位,求指定元素在顺序表的位置 { int i = 0; while(i<length&&elems[i] != e) i++; return i<length?i+1:0; } template<class T> Status SeqList<T>::GetElem(int i,T &e) const//取顺序表中的第i个元素 { if(i<1||i>length) return 0; else{ e = elems[i-1]; return 1;} } template<class T> Status SeqList<T>::SetElem(int i,const T &e)//修改顺序表中的第i个元素 { if(i<1||i>length) return 0; else{ elems[i-1] = e; return 1;} } template<class T> Status SeqList<T>::DeleteElem(int i,T &e)//删除顺序表中的第i个元素 { if(i<1||i>length) return 0; else{ e = elems[i-1]; for(int j = i;j<length;j++) elems[j-1] = elems[j]; length--; return 1;} } template<class T> Status SeqList<T>::InsertElem(int i,const T &e) { if(length == maxLength) return 0; else if(i<1||i>length+1) return 0; else { for(int j=length;j>=i;j--) elems[j] = elems[j-1]; length++; return 1; } } /* template<class T> SeqList<T>::SeqList(const SeqList<T> &s)//复制构造函数 { } template<class T> SeqList<T>::SeqList<T> &operator= (const SeqList<T> &s)//赋值语句重载 { if(this==s) return *this; else{ delete[] this; } */ //测试程序 #include <iostream> #include "SeqList.h" using namespace std; //template <class T> class SeqList; int main() { int a[10]; int x,y; const int l = 0; for(int i=0;i<10;i++) cin>>a[i]; SeqList<int> t(a,10,100); // l = t.GetLength(); for(int i=0;i<9;i++) for(int j=i+1;j<10;j++) { GetElem(i,x); GetElem(j,y); if(x==y) t.DeleteElem(j,y); } return 0; }