#include <iostream>
using namespace std;
typedef int DataType;
class SeqList
{
public:
SeqList()
:_array(NULL)
, _size(0)
, _capicity(0)
{}
~SeqList()
{
if (_array)
{
delete[] _array;
}
_size = 0;
_capicity = 0;
}
// 使用优化的写法
SeqList(const SeqList& sList)
{
_array = new DataType[sList._capicity];
memcpy(_array, sList._array, sizeof(DataType)*sList._size);
_size = sList._size;
_capicity = sList._capicity;
}
SeqList& operator=(const SeqList& sList)
{
delete[] _array;
_array = new DataType[sList._capicity];
memcpy(_array, sList._array, sizeof(DataType)*sList._size);
_size = sList._size;
_capicity = sList._capicity;
return *this;
}
public:
void Print()
{
for (size_t i = 0; i < _size; ++i)
{
cout << _array[i] << " ";
}
cout << endl;
}
void PushBack(const DataType& x)
{
_CheckCapicity();
_array[_size++] = x;
}
void PopBack()
{
if (_size)
--_size;
}
void PushFront(const DataType& x)
{
_CheckCapicity();
for (int i = _size; i > 0; i--)
{
_array[i] = _array[i - 1];
}
_array[0] = x;
_size++;
}
void PopFront()
{
if (_size)
{
for (int i = 0; i < _size - 1; i++)
{
_array[i] = _array[i + 1];
}
--_size;
}
}
// 实现上面的函数
void Insert(size_t index, const DataType& x)
{
if (index >= 0 && index < _size)
{
for (int i = _size; i > index; i--)
{
_array[i] = _array[i - 1];
}
_array[index] = x;
}
++_size;
}
void Modified(size_t index, const DataType& x)
{
if (index >= 0 && index < _size)
{
_array[index] = x;
}
}
void Remove(size_t index)
{
if (index >= 0 && index < _size)
{
for (int i = index; i < _size - 1; i++)
{
_array[i] = _array[i + 1];
}
}
--_size;
}
bool Find(const DataType& x)
{
if (_size == 0)
{
return NULL;
}
else if (_size == 1)
{
if (_array[0] == x)
{
return true;
}
else
{
return false;
}
}
else
{
for (int i = 0; i < _size; i++)
{
if (_array[i] == x)
{
return true;
}
}
return false;
}
}
private:
void _CheckCapicity()
{
if (_size == _capicity)
{
_capicity = 2 * _capicity + 3;
DataType* tmp = new DataType[_capicity];
memcpy(tmp, _array, sizeof(DataType)*_size);
delete[] _array;
_array = tmp;
}
}
private:
DataType* _array;
size_t _size;
size_t _capicity;
};
void Test1()
{
SeqList s1;
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
s1.PushBack(5);
s1.Print();
SeqList s2(s1);
s2.Print();
SeqList s3;
s3 = s1;
s3.Print();
}
int main()
{
Test1();
SeqList s;
int i = 0;
size_t index;
while (1)
{
cout << "请选择:" << endl;
cout << "1.尾插 2.尾删" << endl;
cout << "3.头插 4.头删" << endl;
cout << "5.插入 6.修改" << endl;
cout << "7.删除 8.打印" << endl;
cout << "9.查找 " << endl;
cin >> i;
int x = 0;
switch (i)
{
case 1:
cout << "请依次输入数据,以-1结束" << endl;
do{
cin >> x;
if (x != -1)
s.PushBack(x);
} while (x != -1);
break;
case 2:
s.PopBack();
break;
case 3:
cout << "请输入需要插入的数:" << endl;
cin >> x;
s.PushFront(x);
break;
case 4:
s.PopFront();
break;
case 5:
cout << "请输入要插入的位置下标:"<<" ";
cin >> index;
cout << "请输入要插入的数:" << " ";
cin >> x;
s.Insert(index, x);
break;
case 6:
cout << "请输入要修改数的下标以及要改为的数:" << " ";
cin >> index;
cin >> x;
s.Modified(index, x);
break;
case 7:
cout << "请输入要删除数的下标:" << " ";
cin >> index;
s.Remove(index);
break;
case 8:
s.Print();
break;
case 9:
cout << "请输入要查找的数:" << " ";
cin >> x;
cout << s.Find(x) << endl;
break;
default:
cout << "输入错误,请重新输入" << endl;
break;
}
}
}
class_SeqList.
最新推荐文章于 2021-08-18 13:21:32 发布