顺序表:用一段地址连续的存储单元一次存储数据元素的线性结构。
目的:比较数组
下来用代码来实现顺序表的各个功能:
#include<iostream>
using namespace std;
typedef int DataType;
class Seqlist
{
public:
Seqlist()//构造函数
:_a(NULL)
,_size(0)
,_capacity(0)
{}
Seqlist(const Seqlist& s)//拷贝构造函数
{
if(_a)
{
_a=(DataType*)malloc(sizeof(DataType)*s._size);
memcpy(_a,s._a,sizeof(DataType)*s._size);
}
else
_a=NULL;
_size=s._size;
_capacity=s._capacity;
}
~Seqlist()//析构函数
{
if(_a!=NULL)
{
free(_a);
}
}
Seqlist& operator=(const Seqlist&s) //赋值运算符的重载
{
if (this != &s)
{
if (s._a != NULL)
{
DataType* tmp = (DataType*)malloc(sizeof(DataType)*s._size);
memcpy(tmp, s._a, sizeof(DataType)*s._size);
free(_a);
_a = tmp;
}
else
{
free(_a);
_a = NULL;
}
_size = s._size;
_capacity = s._size;
}
return *this;
}
void PushBack(DataType x)//尾插
{
CheekCapacity();
_a[_size] = x;
_size++;
}
void PopBack()//尾删
{
if(_size == 0)
{
cout<<"顺序表为空"<<endl;
}
else
{
--_size;
}
}
void Insert(size_t pos,DataType x)//指定位置插入元素
{
if(pos>0 && pos<=_size)
{
size_t i = _size;
while(i >= pos)
{
_a[i] = _a[i-1];
i--;
}
_a[pos-1] = x;
_size++;
}
}
void Delete(size_t pos) //删除指定位置元素
{
if(pos>0 && pos < _size)
{
for (size_t i = pos - 1; i < _size; i++)
{
_a[i] = _a[i + 1];
}
}
_size--;
}
void CheekCapacity()//检查函数容量
{
if(_size == _capacity)
{
_capacity = _capacity*2+3;
_a = (DataType*)realloc(_a,_capacity*sizeof(DataType));
}
}
void Swap(Seqlist& s) //交换函数
{
swap(_a, s._a);
swap(_size, s._size);
swap(_capacity, s._capacity);
}
int Find(DataType x)//查找函数
{
for (size_t i = 0; i < _size; i++)
{
if (_a[i] == x)
{
return i + 1;
}
else
continue;
}
}
void Print() //打印显示函数
{
for (size_t i = 0; i < _size; ++i)
{
cout << _a[i] << " ";
}
cout << endl;
}
private:
DataType *_a;//数据块指针
size_t _size;//当前有效数据个数
size_t _capacity;//容量
};
void TestSeqlist()//测试函数
{
Seqlist l1;
Seqlist l2;
l1.PushBack(1);
l1.PushBack(2);
l1.PushBack(3);
l1.PushBack(4);
//l2=l1;
//l1.Insert(3,3);
//l1.PopBack();
//l1.Find(3);
//cout << s1.Find(1) << endl;
//l1.Delete(2);
l1.Print();
//l2.operator=(l1);
//l2.Print();
}
int main()
{
TestSeqlist();
return 0;
}