顺序表(C++实现)

来源:互联网 发布:懒人做饭知乎 编辑:程序博客网 时间:2024/06/13 22:18

       顺序表是基本的数据结构,创建Seqlist类,主要包括类的默认成员函数(构造函数、析构函数、赋值运算符重载),顺序表的基本功能实现。


//顺序表typedef int DataType;class Seqlist{public:     Seqlist()      //无参构造函数         :_array(NULL)         ,_size(0)         ,_capacity(0)     { }          ~Seqlist()    //析构函数     {         if (_array)         {             delete[] _array;         }     }      //深拷贝     Seqlist(const Seqlist & s)     //拷贝构造函数         :_array(new DataType[s._size])          , _size(s._size)          , _capacity(s._size)    {         memcpy(_array, s._array, sizeof(DataType)*(_size));    //内存拷贝    }        Seqlist & operator=(const Seqlist & s)     //赋值运算符重载    {        if (this != &s)     //考虑自己给自己赋值的情况        {            DataType * tmp = new DataType[s._size];            delete[] _array;                        _array = tmp;            _size = s._size;            _capacity = s._size;            memcpy(_array, s._array, sizeof(DataType)*(_size));        }        return *this;    }    public:    void PushBack(DataType x)     //尾插   {       check_capacity();       _array[_size++] = x;    }        void PopBack()      //尾删    {        if(_size)        {            _array[_size] = NULL;            _size--;        }    }         void PushFront(DataType x)    //头插    {        check_capacity();        for (int i = 0; i < _size; i++)        {            _array[_size - i] = _array[_size - 1 - i];        }        _array[0] = x;        _size++;    }        void PopFront()     //头删    {        if(_size)        {            for (int i = 0; i < _size; i++)            {                 _array[i] = _array[i + 1];            }            _size--;        }    }        void Insert(size_t pos, DataType x)    //任何位置插入    {        check_capacity();        if ((pos < 1) || (pos > _size))        {            return;        }        else        {            for (int i = 0; i < pos; i++)            {                _array[_size + 1 - i] = _array[_size - i];             }            _array[pos + 1] = x;        }        _size++;    }        void Erase(size_t pos)    //删除pos位置的数据    {        assert(pos);        for (int i = pos; i < _size; i++)        {            _array[i-1] = _array[i];         }        _size--;    }        int Find(DataType x)    //查找    {        int i = 0;        while ((i < _size) && (x != _array[i]))        {            i++;        }        if (i < _size)        {            return i + 1;         }        else       {            return 0;       }    }        void PrintSeqlist()     //格式化输出    {        for (int i = 0; i < _size; i++)        {            cout << _array[i] << " ";        }        cout << endl;    } private:    void check_capacity()    {        if (_size >= _capacity)        {            _capacity = _capacity + 2;               //2是为了防止开始容量为0,便于增容,也可以开始开辟一部分空间            _array = (DataType *)realloc(_array, _capacity*(sizeof(DataType)));        }    }private:    DataType * _array;   //数组    size_t _size;    //有限个数    size_t _capacity;    //容量};


本文出自 “无心的执着” 博客,谢绝转载!

0 0
原创粉丝点击