码迷,mamicode.com
首页 > 编程语言 > 详细

顺序表(C++实现)

时间:2016-02-29 23:23:27      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:顺序表、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++、构造函数、析构函数、赋值运算符重载

原文地址:http://10740590.blog.51cto.com/10730590/1746163

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!