C++顺序表的实例代码

 更新时间:2020年05月22日 16:00:51   作者:tttjp  
这篇文章主要为大家详细介绍了C++实现顺序表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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; 
} 

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

相关文章

  • C++初阶之list的模拟实现过程详解

    C++初阶之list的模拟实现过程详解

    在C++中我们经常使用STL,那个在那些我们常用的数据结构vector,list的背后,又是如何实现的呢?这篇文章主要给大家介绍了关于C++初阶之list的模拟实现的相关资料,需要的朋友可以参考下
    2021-08-08
  • C/C++中一次性执行多个DOS命令的实现思路

    C/C++中一次性执行多个DOS命令的实现思路

    在C语言中执行DOS命令的方法很多,在这就不一给大家一一介绍了,本文重点给大家介绍C/C++中一次性执行多个DOS命令的实现思路,需要的朋友参考下
    2017-12-12
  • VS2019创建C++工程的的实现步骤

    VS2019创建C++工程的的实现步骤

    本文主要介绍了VS2019创建C++工程步骤,包含新建项目、编辑文件、配置源文件目录、编译链接、输出文件、设置断点调试,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12
  • C语言实现简易三子棋

    C语言实现简易三子棋

    这篇文章主要为大家详细介绍了C语言实现简易三子棋,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 基于WTL中使用双缓冲避免闪烁的解决方法

    基于WTL中使用双缓冲避免闪烁的解决方法

    本篇文章是对WTL中使用双缓冲避免闪烁的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 用VScode编写C++大型项目的方法步骤

    用VScode编写C++大型项目的方法步骤

    本文主要介绍了用VScode编写C++大型项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C语言动态内存函数(malloc、calloc、realloc、free)详解

    C语言动态内存函数(malloc、calloc、realloc、free)详解

    在C语言中,动态内存函数是块重要的知识点,以往,我们开辟空间都是固定得,数组编译结束后就不能继续给它开辟空间了,开辟的空间满了,就不能在开辟空间了,学习本文章,我们就可以解决这个问题,向内存申请空间,感兴趣的小伙伴跟着小编一起来看看吧
    2023-08-08
  • C++实现LeetCode(123.买股票的最佳时间之三)

    C++实现LeetCode(123.买股票的最佳时间之三)

    这篇文章主要介绍了C++实现LeetCode(123.买股票的最佳时间之三),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++实现LeetCode(81.在旋转有序数组中搜索之二)

    C++实现LeetCode(81.在旋转有序数组中搜索之二)

    这篇文章主要介绍了C++实现LeetCode(81.在旋转有序数组中搜索之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 在C++中实现云端存储变量的操作步骤

    在C++中实现云端存储变量的操作步骤

    随着云计算技术的快速发展,现在我们可以将数据存储在云端,以便于在不同设备和地点访问,在C++中,我们也可以通过一些方法来实现这个功能,本文将详细介绍如何在C++中实现云端存储变量,需要的朋友可以参考下
    2023-11-11

最新评论