数据结构与算法——线性表(C++特性)

项目GitHub:传送门

目录

    • 线性表的定义
    • 线性表的特性
    • 线性表的抽象数据类型定义
    • C++语言描述及实现(具备C++特性)
      • 1.线性表的顺序存储结构定义
      • 2.线性表的链式存储结构定义
      • 3.方法实现

线性表的定义

  1. 线性表(list): 零个或多个数据元素的有限序列
  2. 线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表
  3. 存储逻辑关系一对一

线性表的特性

  1. 存在唯一的一个被称为“第一个”的数据元素;
  2. 存在唯一的一个被称为“最后一个”的数据元素;
  3. 除第一个之外,结构中的每个数据元素均只有一个前驱;
  4. 除最后一个之外,结构中的每个数据元素均只有一个后继。

线性表的抽象数据类型定义

ADT 线性表(List)
Data :数据对象的集合。元素及有相同的类型,相邻元素具有前驱和后继关系。
Operation:

  1. InitList(*L):构建一个空的线性表L。
  2. DestroyList(*L):若线性表存在,则销毁它。
  3. ClearList(*L):将线性表清空。
  4. ListEmpty(L):若线性表为空,返回true,否则返回false。
  5. GetElem(L, i, &e):用e返回线性表的第i个元素。
  6. LocateElem(L, e):返回L中第一个与e相等的元素的序号。若不存在,则返回0。
  7. ListDelet(int i):删除第i个元素并返回其值
  8. PriorElem(const T& item):返回第一个与item相等的元素的前驱
  9. NextElem(const T& item):返回第一个与item相等的元素的后继

endADT

C++语言描述及实现(具备C++特性)

1.线性表的顺序存储结构定义

  • 线性表的抽象与封装
/*
 *	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;								//线性表元素个数
};

2.线性表的链式存储结构定义

  • 线性表的抽象与封装
/*
 *	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;					//尾指针
};


3.方法实现

  • 具体方法实现因篇幅过长不便在此展示,请读者跳转项目GitHub:传送门详细阅读所有代码。
  • 欢迎大家积极提交issue,感谢你的Star。

你可能感兴趣的:(算法与数据结构(C++),数据结构,c++,算法)