顺序表(C++实现)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序表(C++实现)相关的知识,希望对你有一定的参考价值。

       顺序表是基本的数据结构,创建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()      //尾删
    {
        _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()     //头删
    {
        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位置的数据
    {
        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;    //容量
};


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

以上是关于顺序表(C++实现)的主要内容,如果未能解决你的问题,请参考以下文章

C++ class实现动态分配的顺序表(完整代码)

用C++实现顺序表

c++中的顺序表写法,主要实现(增删查改,构造函数,运算符重载)

顺序表功能的基本实现

学习数据结构,寻找优秀代码参考学习(C++),能够实现功能即可,发邮箱413715076@qq.com

C++ 实现分块查找(顺序存储结构)(完整代码)