循环单链表.ppt

循环单链表

数据结构讲义 第2章 线性表 教学要求: 1、理解和掌握: 线性表抽象数据类型的定义及相关概念,线性表的应用,包括线性表顺序存储结构中的顺序表类,线性表链式存储结构中的单链表类、循环单链表和双向链表 。 2、了解:静态链表。 内容提要 线性表抽象数据类型 线性表的顺序存储结构-顺序表类 线性表的链式存储结构-单链表类 循环单链表和双向链表 静态链表 线性表抽象数据类型 一、线性表的定义 线性表(Linear_list)可以看作是n个数据元素的有限序列。线性表的元素之间存在线性的逻辑关系:除开始结点外,每个结点有且只有一个前驱结点,除终端结点外,每个结点有且只有一个后继结点。线性表一般可以记做: (a0, a1, …, ai-1,ai,ai+1,… ,an-1) 线性表中的数据元素可以是基本数据类型(如字符类型、整型等),也可以是复合数据类型(如结构类型、类类型等),但一般同一线性表的数据元素必须是相同数据类型。 一般地,我们通过typedef语句说明数据类型DataType,然后将线性表中的数据元素类型声明为DataType。如: typedef int DataType;//线性表元素类型为int typedef char DataType;//线性表元素类型为char 前趋结点、后继结点: 线性表中元素之间存在着顺序关系。将 ai-1 称为 ai 的直接前趋,ai+1 称为 ai 的直接后继。a0 是表中第一个元素,它没有前趋结点,an-1 是最后一个元素无后继结点。 线性表表的长度:线性表中数据元素的个数。 空表:没有数据元素的线性表 二、线性表基本操作 : Initial(L) 初始化线性表L(空表); Size(L) 求一个线性表L的表长 ; GetData(L,i) 取线性表的第i个元素 ,并返回取得的元素; Delete(L,i)删除线性表L的第i个元素,并返回删除的元素; Insert(L,i,x)在线性表L的第i个元素之前插入一个新的元素x; Index(L,x)定位 …… 三、线性表的ADT描述 ADT List is Data 线性表元素集合及其关系,表长信息 Operation Constructor //构造函数,用于初始化线性表 Size //求线性表长度 Insert //插入操作 Delete //删除操作 Index //查找 ….. end ADT List 线性表的顺序存储结构-顺序表类 一、顺序存储结构 : 用一组地址连续的存储单元依次存储线性表的数据元素,这种线性表的机内表示方法称为线性表的顺序存储结构。 相应的,顺序存储结构的线性表称为顺序表。 线性表的顺序存储结构是通过数据元素在计算机内“物理位置相邻”来表示数据元素之间的逻辑关系。 在C++中,我们可通过数组来实现线性表的顺序存储结构: 线性表的顺序存储结构的实现-顺序表类 typedef int DataType; class SeqList { private: DataType* list; //用于存储线性表元素的数组 int MaxSize; //线性表最大元素个数 int size; //线性表当前元素个数 public: SeqList(int max=0); //构造函数 ~SeqList(); //析构函数 int Size(); //求线性表的长度 int Find(const DataType x); //查找 DataType GetData(int i); //获得第i个元素 void Insert(int i,const DataType x); //在第i个元素前插入元素x void Delete(int i); //删除第i个元素 void Print(); //依次显示顺序表中元素 }; 插入算法 线性表的插入是指在表的第i个位置上插入一个值为 x 的新元素,插入后使原表长为 n的表: (a0,a1,... ,ai-1,ai,ai+1,... ,an-1) 成为表长为 n+1 表: (a0,a1,...,ai-1,x,ai,ai+1,...,an-1 ) 。 i 的取值范围为0 = i = n 。 顺序表上完成这一运算则通过以下步骤进行: 判断是否能进行正常插入,如果不能,则显示错误信息并退出。否则转下一步。 将ai~an-1 顺序向后移动

文档评论(0)

1亿VIP精品文档

相关文档