C++实现顺序表

来源:互联网 发布:hr抢购软件 编辑:程序博客网 时间:2024/06/03 14:39
顺序表:用一段地址连续的存储单元一次存储数据元素的线性结构。

目的:比较数组

下来用代码来实现顺序表的各个功能:

#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;}


原创粉丝点击