您的位置:首页 > 编程语言 > C语言/C++

C++实现顺序表简单功能

2017-07-28 11:57 323 查看
实现代码:

typedef int DataType;

class SeqList
{
private:
DataType* _a;
size_t _size;
size_t _capacity;

void CheckCapcacity()
{
if (_size == _capacity)
{
size_t NewCapacity = _capacity ? _capacity * 2 : 3;
_a = (DataType*)realloc(_a, NewCapacity*sizeof(DataType));
assert(_a);
_capacity = NewCapacity;
}
}

public:
SeqList()
:_a(NULL)
, _size(0)
, _capacity(0)
{}
SeqList(const SeqList& s)
{
_a = (DataType*)malloc(s._size*sizeof(DataType));
memcpy(_a, s._a, sizeof(DataType)*s._size);
_size = s._size;
_capacity = s._capacity;
}
/*SeqList& operator=(const SeqList& s)
{
if (this != &s)
{
free(_a);
_a = (DataType*)malloc(s._size*sizeof(DataType));
memcpy(_a, s._a, sizeof(DataType)*s._size);
_size = s._size;
_capacity = s._capacity;
}
return *this;
}*/
SeqList& operator=(SeqList s)//若传引用会改变引用对象的值
{
swap(_a, s._a);
swap(_size, s._size);
swap(_capacity, s._capacity);
return *this;
}
~SeqList()
{
if (_a)
{
free (_a);
_a = NULL;
}
}

void PushBack(DataType x)
{
CheckCapcacity();
_a[_size++] = x;
}
void PopBack()
{
if (_size > 0)
{
_size--;
}
else
{
cout << "顺序表为空" << endl;
}
}
void PushFront(DataType x)
{
/*CheckCapcacity();
DataType end = (DataType)_size;
for (; end >= 0;--end)
{
_a[end + 1] = _a[end];
}
_a[0] = x;
_size++;*/
Insert(0, x);
}
void PopFront()
{
Erase(0);
/*if (_size > 0)
{
DataType i = 0;
for (; i < (int)_size;i++)
{
_a[i] = _a[i+1];
}
_size--;
}
else
{
cout << "顺序表为空" << endl;
}*/
}
void Insert(size_t pos, DataType x)
{
CheckCapcacity();
if (pos<0 || pos>_size)
{
return;
}
DataType end = (DataType)_size-1;
for (; end >=(DataType)pos; end--)
{
_a[end+1] = _a[end];
}
_a[pos] = x;
_size++;

}
void Erase(size_t pos)
{
if (_size > 0)
{
if (pos<0 || pos>_size)
{
return;
}
else
{
DataType i = (DataType)pos;
for (; i < (DataType)_size; i++)
{
_a[i] = _a[i + 1];
}
_size--;
}
}
else
{
cout << "顺序表为空" << endl;
}

}
DataType& operator[](size_t pos)
{
assert(pos < _size);
return _a[pos];
}

void Print()
{
if (_size)
{
DataType i = 0;
for (i = 0; i < (int)_size; i++)
{
cout << _a[i] << " ";
}
cout << endl;
}
else
{
cout << "顺序表为空" << endl;
}
}

};


测试代码:

#include"Seqlist.h"

void Test()
{
SeqList s1;
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
s1.Print();

//s1.Insert(2, 6);
//s1.Print();

/*s1.PushFront(1);
s1.PushFront(2);
s1.PushFront(3);
s1.PushFront(4);
s1.Print();*/

/*s1.Erase(1);
s1.Print();*/

s1.PopFront();
s1.Print();

/*s1.PopBack();
s1.PopBack();
s1.PopBack();
s1.PopBack();
s1.Print();
*/
/*SeqList s2(s1);
s2.Print();
SeqList s3;
s3 = s1;
s3.Print();*/
}
int main()
{
Test();
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: