使用模版类来实现线性表的顺序储存将会变的非常简单,我们不必像使用C语言一样,将数据和算法分离时使用非常繁琐的类型转换了,而我们直接使用模版中的typename就可以解决这个问题。具体实现的代码如下,都有详细的标注和测试代码:

#pragma once

template
class SeqList
{
public:
SeqList(int capacity);
~SeqList();

int insert(int pos, T& data);// 在某位置插入数据
T remove(int pos);// 删除某位置数据
void clear();// 清空线性表
T get(int pos);// 获取某位置数据
int length();// 获取线性表有效元素个数
int capacity();// 获取线性表总长度

private:
// 容量
int m_capacity;
// 已有数据长度
int m_length;
// 指针变量,用来动态分配数组
T* m_array;

};

template
int SeqList::capacity()
{
// 返回总长度
return m_capacity;
}

template
int SeqList::length()
{
// 返回有效节点个数
return m_length;
}

template
T SeqList::get(int pos)
{
// 返回 pos 位置的数据
return m_array[pos];
}

template
void SeqList::clear()
{
// 把有效节点个数置为0
m_length = 0;
}

template
T SeqList::remove(int pos)
{
// 记录被删除的元素内容
T tmp = m_array[pos];
// 循环把被删除位置后面的数据依次向前移动一个
for (int i = pos + 1; i < m_length; i++)
{
m_array[i - 1] = m_array[i];
}
// 线性表长度–
m_length–;
// 返回被删除的数据
return tmp;
}

template
int SeqList::insert(int pos, T& data)
{
// 循环将要插入数据位置后面的数据一次向后移动一次
for (int i = m_length; i > pos; i–)
{
m_array[i] = m_array[i - 1];
}
// 在空出的pos位置插入数据
m_array[pos] = data;
// 有效长度++
m_length++;
return 0;
}

template
SeqList::~SeqList()
{
// 销毁线性表数组
delete[] m_array;
}

template
SeqList::SeqList(int capacity)
{
// 根据capacity长度申请一块空间存放数据
m_array = new T[capacity];
// 初始化两个成员变量
m_capacity = capacity;
m_length = 0;
}

测试代码:

#include
#include “seqlist.hpp”

using namespace std;

int main(int argc, char* argv[])
{
SeqList list(10);

for (int i = 0; i < 10; i++)
{
list.insert(0, i);
}

for (int j = 0; j < list.length(); j++)
{
cout << list.get(j) << “ “;
}

cout << endl << “delete index 5 value is : “ << list.remove(5) << endl;

for (int j = 0; j < list.length(); j++)
{
cout << list.get(j) << “ “;
}

list.clear();

return 0;
}