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;
}







有没有路过好心的大神帮忙看看
