C++如何使用顺序表

小编这次要给大家分享的是C++如何使用顺序表,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。

10年积累的网站设计制作、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有石首免费网站建设让你可以放心的选择与我们合作。

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

看完这篇关于C++如何使用顺序表的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。


分享题目:C++如何使用顺序表
标题网址:http://ybzwz.com/article/jidoij.html