项目GitHub:传送门
ADT 线性表(List)
Data :数据对象的集合。元素及有相同的类型,相邻元素具有前驱和后继关系。
Operation:
- InitList(*L):构建一个空的线性表L。
- DestroyList(*L):若线性表存在,则销毁它。
- ClearList(*L):将线性表清空。
- ListEmpty(L):若线性表为空,返回true,否则返回false。
- GetElem(L, i, &e):用e返回线性表的第i个元素。
- LocateElem(L, e):返回L中第一个与e相等的元素的序号。若不存在,则返回0。
- ListDelet(int i):删除第i个元素并返回其值
- PriorElem(const T& item):返回第一个与item相等的元素的前驱
- NextElem(const T& item):返回第一个与item相等的元素的后继
endADT
线性表的抽象与封装
/*
* Sequential List - 线性表的顺序存储结构
* 特性:逻辑相邻,物理也相邻
*/
template<class T>
class s_List
{
public:
s_List(int listCapacity = 10); //构造函数初始化线性表默认容量为10
void ClearList(); //线性表置空
bool ListEmpty() const; //判断线性表是否为空
bool ListInsert(int i, const T& item); //第i个位置插入元素item
int ListLength(); //获取线性表元素个数
int LocateElem(const T& item); //返回第一个与item相等的元素的序号,不存在则返回0
T GetElem(int i); //获取第i个元素的值
T ListDelet(int i); //删除第i个元素并返回其值
T PriorElem(const T& item); //返回第一个与item相等的元素的前驱
T NextElem(const T& item); //返回第一个与item相等的元素的后继
~s_List(); //销毁线性表
private:
T* s_list; //线性表指针
int capacity; //线性表长度
int length; //线性表元素个数
};
线性表的抽象与封装
/*
* Link List - 线性表的链式存储结构
* 特性:逻辑相邻,物理不相邻
*/
template<class T>
class Node
{
public:
T data;
Node* next;
};
template<class T>
class l_list
{
public:
l_list(); //构造函数初始化头节点
bool ListInsert(const T& item); //逻辑末尾处插入新元素item
bool ListInsert(int i, const T& item); //逻辑顺序i处插入新元素item
int LocateElem(const T& item); //返回第一个与item元素相等的序号,不存在返回0
T GetElem(int i); //获取i个元素个值,i=0则返回头结点数据域即元素个数
T ListDelet(int i); //删除第i个元素并返回其值
~l_list(); //销毁线性表
private:
Node<T>* head; //头结点
Node<T>* rNode; //尾指针
};