C++实现线性表的顺序存储结构
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
线性表的特点
- 除第一个元素外,其他每一个元素有且仅有一个直接前驱。
- 除最后一个元素外,其他每一个元素有且仅有一个直接后继。
- 直接前驱和直接后继描述了结点之间的逻辑关系(即邻接关系)。
顺序表是以数组的形式保存的线性表,将线性表中的元素相继存放在一个连续的存储空间中,使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。
顺序表的特点:所有元素的逻辑先后顺序与其物理存放顺序一致。
线性表顺序存储结构的优缺点:
- 优点:可以快速的得到表中任意位置的元素
- 缺点:1.插入和删除操作需要移动大量元素
2.当线性表长度变化较大时,难以确定存储空间容量
顺序表的基本操作:
-
插入:在表头、表尾和第pos个位置插入数据
-
删除:删除表头、表尾和第pos个位置的数据
-
修改:修改表头、表尾和第pos个位置的数据
-
得到数据:得到表头、表尾和第pos个位置的数据
-
查找:在顺序表中查找数据p,返回位置
-
计算长度:返回顺序表的长度
-
打印
一、顺序表类的定义
template<class T>
class SeqList {
public:
T *data;
int maxSize{
}; //能存储的最大数据量
int last{
}; //当前存储的元素个数(并非元素下标)
public:
SeqList(); //构造函数
SeqList(SeqList<T> &list); //拷贝构造函数
~SeqList(); //析构函数
void reSize(); //增加空间大小
void push_first(T p); //头插法,在顺序表头插入数据
void push_last(T p); //尾插法,在顺序表尾插入数据
bool push_pos(int pos, T p); //在顺序表第pos个位置插入数据
void pop_first(); //删除顺序表头数据
void pop_last(); //删除顺序表尾数据
bool pop_pos(int pos); //删除顺序表第pos个数据
void change_first(T p); //修改顺序表头数据
void change_last(T p); //修改顺序表尾数据
bool change_pos(int pos, T p); //修改顺序表第pos个数据
bool get_first(T &p); //得到顺序表头数据
bool get_last(T &p); //得到顺序表为数据
bool get_pos(int pos, T &p); //得到顺序表第pos个数据
int search(T p); //返回顺序表中p相同的第一个元素的下标pos,若不存在则返回-1
bool isEmpty(); //判断顺序表是否为空
int size(); //返回顺序表能存储的最大数据量
int length(); //返回顺序表的长度
void print(); //打印顺序表
void clear(); //清空顺序表
void delete_link(); //摧毁顺序表
};
二、顺序表中函数的实现
1. 基本函数(构造函数、析构函数、判空等函数):
//构造函数
template<class T>
SeqList<T>::SeqList