首页 > 编程 > C++ > 正文

C++顺序表的实例代码

2020-05-23 13:32:05
字体:
来源:转载
供稿:网友

本文实例为大家分享了C++实现顺序表的具体代码,供大家参考,具体内容如下

#include <iostream> using namespace std;  typedef int DataType;  class SeqList { public:   SeqList()     :_a(NULL)     , _size(0)     , _capacity(0)   {}    SeqList(const SeqList& s)     :_a(new DataType[s._size])     , _size(s._size)     , _capacity(s._capacity)   {     memcpy(_a, s._a, sizeof(DataType)*s._size);   }    SeqList& operator=(const SeqList& s)   {     if (this != &s)     {       DataType* tmp = new DataType[s._size];       delete[] _a;       _a = tmp;       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)     {       delete[] _a;     }   }    void PushBack(DataType d)   {     CheckCapacity();     _a[_size] = d;     _size++;   }    void PopBack()   {     if (_size > 0)     {       _size--;     }     else     {       cout << "顺序表为空" << endl;     }   }    void PushFront(DataType d)   {     CheckCapacity();      int i = (int)_size;     for (; i > 0; i--)     {       _a[i] = _a[i - 1];     }     _a[0] = d;     ++_size;   }    void PopFront()   {     if (_size > 0)     {       int i = 0;       for (; i < (int)_size; i++)       {         _a[i] = _a[i + 1];       }       _size--;     }     else     {       cout << "顺序表为空" << endl;     }   }    void Print()   {     if (_size > 0)     {       int i = 0;       for (; i < (int)_size; i++)       {         cout << _a[i] << " ";       }       cout << endl;     }     else     {       cout << "顺序表为空" << endl;     }   }    void Insert(size_t pos, DataType d) //在pos之前插入一个数据   {     CheckCapacity();      if (_size > 0)     {       if (pos <= 0 || pos > _size)        {         cout << "pos位置非法" << endl;       }       else       {         int i = 0;         for (i = (int)_size + 1; i > pos - 1; i--)         {           _a[i] = _a[i - 1];         }         _a[pos - 1] = d;         _size++;       }     }     else     {       PushFront(d);     }        }    void Erase(size_t pos) //删除pos位置的数据   {     if (_size > 0)     {       if (pos <= 0 || pos > _size)       {         cout << "pos位置非法" << endl;       }       else       {         int i = pos - 1;         for (; i < (int)_size; i++)         {           _a[i] = _a[i + 1];         }         _size--;       }     }     else     {       cout << "顺序表为空,无法进行删除" << endl;     }   }    int Find(DataType d)   {     int i = 0;          for (; i < (int)_size; i++)     {       if (_a[i] == d)       {         return i + 1;       }     }     return 0;   }  private:   void CheckCapacity()   {     if (_size == _capacity)     {       _capacity = _capacity * 2 + 3;       _a = (DataType*)realloc(_a, sizeof(DataType)*_capacity);     }   }  private:   DataType* _a;   size_t _size;   size_t _capacity; }; 

以下为测试函数

#include "SeqList.h";  void Test1() {   SeqList s1;   s1.PushBack(1);   s1.PushBack(2);   s1.PushBack(3);   s1.PushBack(4);   s1.Print();   SeqList s2(s1);   s2.Print();   s2.PopBack();   s2.PopBack();   s2.PopBack();   s2.PopBack();   s2.PopBack();   s2.Print();   s2.PushFront(4);   s2.PushFront(3);   s2.PushFront(2);   s2.PushFront(1);   s2.Print();   s2.PopFront();   s2.Print();   s2.PopFront();   s2.PopFront();   s2.PopFront();   s2.PopFront();   s2.PopFront();   SeqList s3;   s3 = s1;   s3.Print(); }  void Test2() {   SeqList s1;   s1.PushBack(1);   s1.PushBack(2);   s1.PushBack(3);   s1.PushBack(4);   s1.Print();    //s1.Insert(1, 0);   //s1.Print();    /*s1.Erase(1);   s1.Erase(1);   s1.Erase(1);   s1.Erase(1);   s1.Print();*/    int i = s1.Find(5);   cout << i << endl; }  int main() {   //Test1();   Test2();    system("pause");   return 0; } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表