【C++】c++实现线性表、链表

c++实现动态顺序表如下

typedef int DataType;
class SeqList
{
public: 
    //////////////类的基本成员函数定义/////////////////
    SeqList()                     //构造函数(在类内定义)
        :_elem(NULL)
        , _capacity(0)
        , _size(0)
    {}
    ~SeqList()                  //析构函数
    {
        if (_elem)
        {
            delete[] _elem;
            cout << "~SeqList()" << endl;
        }
    }
    SeqList(const SeqList& s)    //拷贝构造函数
        :_elem(new DataType[s._capacity])
        , _capacity(s._capacity)
        , _size(s._size)
    {
        memcpy(_elem, s._elem, _size*sizeof(DataType));
    }
    SeqList& operator= (const SeqList& s)  //赋值操作符重载
    {
        if (this != &s)  //防止自赋值
        {
            delete[] _elem;//释放原来空间
            _elem = new DataType[s._capacity];//分配新空间
            memcpy(_elem, s._elem, s._size*sizeof(DataType));
            _size = s._size;
            _capacity = s._capacity;
        }
        return *this;
    }
    //////////动态顺序表的基本操作实现///////////////
    void _CheckCapacity();         //在类外定义
    void _PrintSeqList();
    void _PushBack(DataType data);
    void _PopBack();
    size_t Find(DataType data);
    void Insert(size_t index,DataType data);
private:
    DataType* _elem;   //指向当前空间的指针
    size_t _capacity;     //当前空间容量大小
    size_t _size;          //但钱空间有效数据的个数
};

类外定义成员函数如下:

void SeqList::_CheckCapacity()         //检查容量
{
    if (_size == _capacity)
    {
        _capacity = _capacity * 2 + 5;//构造函数初始化时,_capacity为0
        DataType* ret = (DataType*)malloc(_capacity*sizeof(DataType));
        memcpy(ret, _elem, _size*sizeof(DataType));
        delete[] _elem;
        _elem = ret;
    }
}
void SeqList::_PrintSeqList()
{
    cout << "SeqList : ";
    size_t index = 0;
    for (; index < _size; index++)
    {
        cout << _elem[index] << " ";
    }
    cout << "NULL" << endl;
}
void SeqList::_PushBack(DataType data) //尾插数据
{
    _CheckCapacity();
    _elem[_size++] = data;
}
void SeqList::_PopBack()
{
    if (_size == 0)
    {
        cout << "SeqList Is Empty" << endl;
        return;
    }
    _size--;
}
size_t SeqList::Find(DataType data)    //查找数据,返回下标
{
    size_t index = 0;
    for (; index < _size; index++)
    {
        if (_elem[index] == data)
        {
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值