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语言循环链表实现贪吃蛇游戏

    C语言循环链表实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了C语言循环链表实现贪吃蛇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • ubunt18.04LTS+vscode+anaconda3下的python+C++调试方法

    ubunt18.04LTS+vscode+anaconda3下的python+C++调试方法

    这篇文章主要介绍了ubunt18.04LTS+vscode+anaconda3下的python+C++调试方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • C语言实现简易连连看游戏

    C语言实现简易连连看游戏

    这篇文章主要为大家详细介绍了C语言实现简易连连看游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • C++进一步认识类与对象

    C++进一步认识类与对象

    类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数
    2021-10-10
  • C语言实现顺序表的插入删除

    C语言实现顺序表的插入删除

    这篇文章主要介绍了C语言实现顺序表的插入删除,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • C++ 互斥锁原理以及实际使用介绍

    C++ 互斥锁原理以及实际使用介绍

    本文主要聊一聊如何使用互斥锁以及都有哪几种方式实现互斥锁。实现互斥,可以有以下几种方式:互斥量(Mutex)、递归互斥量(Recursive Mutex)、读写锁(Read-Write Lock)、条件变量(Condition Variable)。感兴趣的同学可以参考一下
    2023-04-04
  • C++实现模拟shell命令行(代码解析)

    C++实现模拟shell命令行(代码解析)

    这篇文章主要介绍了C++实现模拟shell命令行,本文通过实例代码进行命令行解析,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C++中单链表操作的示例代码

    C++中单链表操作的示例代码

    这篇文章主要为大家详细介绍了C++中单链表操作的示例代码,主要包括单链表的创建、元素的插入和删除等。文中的代码简洁易懂,需要的可以参考一下
    2022-10-10
  • Qt编译OpenCV的实现步骤

    Qt编译OpenCV的实现步骤

    本文主要介绍了Qt编译OpenCV的实现步骤,通过详细的步骤和说明,帮助开发者在Qt环境中成功集成并编译OpenCV,从而为各类计算机视觉项目提供强大的支持,感兴趣的可以了解一下
    2024-01-01
  • C++中指向对象的常指针与指向常对象的指针详解

    C++中指向对象的常指针与指向常对象的指针详解

    如果一个变量已经被声明成常变量,则只能用指向常变量的指针变量指向它,而不能用一般的(非const型的)指针变量指向它
    2013-10-10

最新评论