【c++】顺序表

来源:互联网 发布:细说php第四版 编辑:程序博客网 时间:2024/05/21 05:38

顺序表的内容C语言博客已经描述过,这里只贴上c++代码

#include<iostream>#include<cstring>#include<cstdlib>using namespace std;#define MAX 100typedef int DateType;class SeqList{friend  ostream& operator<<(ostream&os,SeqList &seq);public:SeqList():_sz(0),_capacity(0),_pdate(NULL){}SeqList(const SeqList& seq){_pdate=new DateType[seq._capacity];memcpy(_pdate,seq._pdate,seq._sz*(sizeof(DateType)));_sz=seq._sz;_capacity=seq._capacity;}~SeqList(){if(_pdate!=0){delete[] _pdate;_pdate=NULL;}_sz=0;_capacity=0;}void PushBack(const DateType& x)//尾插 {checkcapacity();   _pdate[_sz]=x;   _sz++;}void PopBack()//尾删 {  if (_sz == 0)     {        return;     }      _sz--;  }void PushFront(const DateType& x)//头插 {    int i = 0;       for (i = (_sz) - 1; i >= 0; i--)     {          _pdate[i + 1] = _pdate[i];      }      _pdate[0] = x;      _sz++;  }void PopFront()//头删{   int i=0;   if(_sz==0)   {  return ;   }   for(i=0;i<_sz-1;i++)   {   _pdate[i]=_pdate[i+1];   }   _sz--;}void Insert(int pos,const DateType& x)//指定为插入 {int i=0;if(pos<1){return ;}for(i=(_sz)-1;i>=pos-1;i--){    _pdate[i+1]=_pdate[i];}  _pdate[pos - 1] = x;        _sz++;  }void Remove(const DateType& x)//指定值删除 {int i=0,j=0;while(i<_sz){if(_pdate[i]==x)j++;//j记录被删记录的个数else_pdate[i-1]=_pdate[i];i++;}_sz--;}void RemoveAll(const DateType& x)//删除所有 x{{int i=0,j=0;while(i<_sz){if(_pdate[i]==x)j++;//j记录被删记录的个数else_pdate[i-j]=_pdate[i];//前移j个位置i++;}_sz-=j;}}void Sort()//排序{     int i = 0;      int j = 0;      for (i = 0; i < _sz - 1; i++)      {          for (j = 0; j < _sz - 1 - i; j++)         {              if (_pdate[j]>_pdate[j + 1])              {                  DateType temp = _pdate[j];                  _pdate[j] = _pdate[j + 1];                  _pdate[j + 1] = temp;            }          }      }  }int BinarySearch(const DateType& x)//二分查找法 { int mid = 0;      int left = 0;      int right = (_sz) - 1;       if (_sz == 0)      {          return 0;      }      Sort();                  while (left <= right)      {          mid = (left + right) / 2;          if (x > _pdate[mid])         {              left = mid+1;          }         else if (x < _pdate[mid])         {            right = mid-1;         }          else          {              return mid;         }     }    return -1;  }private:void checkcapacity(){if(_sz==_capacity){int Newcapacity=_capacity+10;DateType* tmp=new DateType[Newcapacity];memcpy(tmp,_pdate,_sz*sizeof(DateType));_pdate=tmp;_capacity=Newcapacity;}}DateType* _pdate;    int _capacity;    int _sz;};ostream& operator<<(ostream& os,SeqList &seq){for(int i=0;i<seq._sz;i++){os<<seq._pdate[i]<<" ";}cout<<endl;return os;}
测试用例int main(){    SeqList pSeq;     pSeq.PushBack(1);pSeq.PushBack(2);pSeq.PushBack(3);pSeq.PushBack(4);cout<<pSeq<<endl;pSeq.PopBack();cout<<pSeq<<endl;pSeq.PushFront(9);cout<<pSeq<<endl;pSeq.PopFront();cout<<pSeq<<endl;pSeq.Insert(3,10);cout<<pSeq<<endl;pSeq.Remove(2);cout<<pSeq<<endl;pSeq.RemoveAll(2);cout<<pSeq<<endl;pSeq.Sort();cout<<pSeq<<endl;int ret=pSeq.BinarySearch(1);printf("第%d位\n",ret+1);system("pause");return 0;}


0 0
原创粉丝点击