最近在看《大话数据结构》,回顾一下之前数据结构的学习,之前是用C语言来完成的代码,鉴于已经学习了C++,此次便使用类来进行顺序表的封装吧!
一、概念
顺序表,全名顺序存储结构,是线性表的一种,他符合线性表“一对一”的逻辑关系。同时又占用一组地址连续的存储单元。
动态顺序表:指的是用来存储数据的数组大小是我们动态申请的,用起来比较灵活。
静态顺序表:在设计的时候,就已经规定了数组的大小,不灵活。
此次我们使用的是动态顺序表来进行的操作。
二、设计顺序表
线性表的动态分配顺序存储结构
typedef struct
{
int *_data;//动态数组
int _size;//有效元素数量
int _capacity;//数组总容量
}SeqList;
注意,_data 可以看做是一个指向动态数组的指针。
三、将顺序表进行封装成类
这里我们直接给代码,代码很简单,大家注意几点即可:
1、顺序表初始化是在构造函数初始化列表中进行的
2、析构函数要给出
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string.h>
#include<assert.h>
using namespace std;
typedef int DataType;
class SeqList
{
public:
SeqList() //构造函数
: _pData(new DataType[3])
, _capacity(3)
, _size(0)
{
}
SeqList(DataType* array, size_t size)//构造函数
:_pData(new DataType[size])
, _capacity(size)
, _size(size)
{
//拷贝方式1
//memcpy(_pData, array, sizeof(DataType)*size);
//拷贝方式2
for (size_t i = 0; i < size; ++i)
_pData[i] = array[i];
}
SeqList(const SeqList& s)//拷贝构造函数
{
_pData = new DataType[s._size];
_capacity = s._size;
_size = s._size;
for (size_t i = 0; i < s._size; ++i)
_pData[i]