| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2153 人关注过本帖
标题:c++顺序表用类模板怎么创建,数据结构问题
只看楼主 加入收藏
xyzw
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2016-5-18
结帖率:100%
收藏
 问题点数:0 回复次数:7 
c++顺序表用类模板怎么创建,数据结构问题
利用顺序表实现给定一串数据去除重复的留下第一次出现的那个数,怎么实现?大神帮帮忙。
2016-12-06 21:20
xyzw
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2016-5-18
收藏
得分:0 
程序代码:
//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;
}
2016-12-06 22:06
xyzw
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2016-5-18
收藏
得分:0 
请帮帮忙看那看,这个程序哪里出了问题,谢谢。
2016-12-06 22:07
xyzw
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2016-5-18
收藏
得分:0 
有没有路过好心的大神帮忙看看
2016-12-06 22:14
xyzw
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2016-5-18
收藏
得分:0 
😭😭😭😭😭
2016-12-06 22:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
这么长的代码,你还是自己去除错吧

程序代码:
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;

int main( void )
{
    vector<int> buf = { 1, 3, 5, 3, 4, 2, 1 };

    // 输出去重之前的数据
    copy( begin(buf), end(buf), ostream_iterator<int>(cout," ") );
    cout << endl;

    // 去重
    sort( begin(buf), end(buf) );
    buf.erase( std::unique(begin(buf),end(buf)), end(buf) );

    // 输出去重之后的数据
    copy( begin(buf), end(buf), ostream_iterator<int>(cout," ") );
    cout << endl;

    return 0;
}
输出
1 3 5 3 4 2 1
1 2 3 4 5
2016-12-07 09:02
xyzw
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2016-5-18
收藏
得分:0 
回复 6楼 rjsp
我那个本来是想用顺序表实现,就构造了一个类去实现,但是那个类里面有个函数我不知道怎么调用它
2016-12-07 15:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
回复 7楼 xyzw
那我给出的代码符合你的要求吗?
2016-12-07 16:08
快速回复:c++顺序表用类模板怎么创建,数据结构问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018825 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved