线性链表课件.ppt
《线性链表课件.ppt》由会员分享,可在线阅读,更多相关《线性链表课件.ppt(457页珍藏版)》请在三一办公上搜索。
1、课程简介,数据结构,深圳大学计算机系 蔡茂国,数据结构课程简介,本课程教材为:数据结构(C语言版)严蔚敏,吴伟民清华大学出版社2004年11月(第28次印刷),2,主要参考教材,数据结构课程简介,所有课件、作业及实验,均上传至:深圳大学首页 课程中心 输入学生姓名及密码,实现登录 从数据结构课程下下载,3,课件下载,第一章数据结构绪论,数据结构,深圳大学计算机系 蔡茂国,一、数据,5,第一节数据结构,是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中,被计算机程序识别和处理的符号的集合数值性数据非数值性数据,第章数据结构绪论,二、数据元素(Data Element),6,第一节数
2、据结构,数据的基本单位。在计算机程序中常作为一个整体进行考虑和处理。有时一个数据元素可以由若干数据项(Data Item)组成(此时数据元素被称为记录)数据元素又称为元素、结点、记录,第章数据结构绪论,三、数据项(Data Item),7,第一节数据结构,具有独立含义的最小标识单位。,第章数据结构绪论,四、数据对象(Data Object),8,第一节数据结构,具有相同性质的数据元素的集合。整数数据对象 N=0,1,2,字母字符数据对象 C=A,B,C,F。,第章数据结构绪论,五、结构(Structure),9,第一节数据结构,结构是元素之间的:空间位置关系相互作用和依赖关系,第章数据结构绪论
3、,五、结构,10,第一节数据结构,四种基本结构集合结构线性结构树形结构图形结构,第章数据结构绪论,1,六、数据结构(Data Structure),11,第一节数据结构,1.形式定义:某一数据对象的所有数据成员之间的关系。记为:Data_Structure=D,S其中,D 是某一数据对象,S 是该对象中所有数据成员之间的关系的有限集合。,第章数据结构绪论,六、数据结构,12,第一节数据结构,2.线性数据结构举例 L=K,RK=1,2,3,4,5,6R=,第章数据结构绪论,六、数据结构,13,第一节数据结构,3.树形数据结构举例 T=K,RK=1,2,3,4,5,6R=,第章数据结构绪论,六、数
4、据结构,14,第一节数据结构,4.图形数据结构举例 G=K,RK=1,2,3,4,5,6R=(1,2),(1,5),(1,6),(2,3),(2,4),(2,6),(3,4),(4,5),(4,6),(5,6),第章数据结构绪论,七、应用举例,15,第一节数据结构,1.线性数据结构举例数据结构学生选课名单(部分),第章数据结构绪论,七、应用举例,16,第一节数据结构,2.树形数据结构举例UNIX文件系统结构图(部分),第章数据结构绪论,七、应用举例,17,第一节数据结构,3.图形数据结构举例深圳城市交通示意图(部分),第章数据结构绪论,八、数据结构要解决的问题,18,第一节数据结构,如何为应用
5、程序中涉及到各种各样的数据,建立相应的数据结构(表、树或图),并依此实现软件功能从广义上讲,数据结构描述现实世界实体的数学模型及其上的操作在计算机中的表示和实现,第章数据结构绪论,一、逻辑结构,19,第二节数据的结构,逻辑结构描述数据元素之间的关系线性结构线性表(表,栈,队列,串等)非线性结构树(二叉树,Huffman树,二叉排序树等)图(有向图,无向图等),第章数据结构绪论,二、物理结构(存储结构),20,第二节数据的结构,物理结构是数据结构在计算机中的表示(或映象)顺序存储表示(可以用C语言中一维数组表示)链接存储表示(可以用C语言中的指针表示)索引存储表示散列存储表示,第章数据结构绪论,
6、二、物理结构(存储结构),21,第二节数据的结构,复数存储结构举例,第章数据结构绪论,z1=3.0-2.3i指针或链(地址),z1=3.0-2.3i z2=-0.7+4.8i,顺序存储结构,链式存储结构,一、数据类型,22,第三节数据类型,数据类型是一个值的集合和定义在这个值集上的一组操作的总称如C语言中的整型变量(int),其值集为某个区间上的整数,定义在其上的操作为+,-,x,/等,第章数据结构绪论,二、原子数据类型和结构数据类型,23,第三节数据类型,1.原子数据类型是不可分解的数据类型如C语言中的整型(int),实型(float),字符型(char),指针类型(*)和空类型(void)
7、等,第章数据结构绪论,二、原子数据类型和结构数据类型,24,第三节数据类型,2.结构数据类型由若干成分(原子类型或结构类型)按某种结构组成的数据类型结构数据类型可以看作是一种数据结构和定义在其上的一组操作组成的整体如数组,由若干分量组成,每个分量可以是整数,也可以是数组(如int A10),第章数据结构绪论,三、抽象数据类型(Abstract Data Type),25,第三节数据类型,由用户定义,用以表示应用问题的数据模型由基本的数据类型组成,并包括一组相关的服务(或称操作)信息隐蔽和数据封装,使用与实现相分离,第章数据结构绪论,三、抽象数据类型(ADT),26,第三节数据类型,抽象数据类型
8、(ADT)是一个数学模型以及定义在该模型上的一组操作抽象数据类型=数据结构+定义在此数据结 构上的一组操作,第章数据结构绪论,三、抽象数据类型(ADT表示),27,第三节数据类型,抽象数据类型可用(D,S,P)三元组表示D是数据对象S是D上的关系集P是对D的基本操作集。,第章数据结构绪论,三、抽象数据类型(ADT定义),28,第三节数据类型,ADT 抽象数据类型名 数据对象:数据对象的定义 数据关系:数据关系的定义 基本操作:基本操作(函数)的定义 ADT 抽象数据类型名,第章数据结构绪论,三、抽象数据类型(ADT定义举例),29,第三节数据类型,ADT Triplet 数据对象:D=e1,e
9、2,e3|e1,e2,e3ElemSet 数据关系:R=,基本操作:Max(T,&e)初始条件:三元组T已存在。操作结果:用e返回T的3个元素中的最大值。Min(T,&e)初始条件:三元组T已存在。操作结果:用e返回T的3个元素中的最小值。ADT Triplet,第章数据结构绪论,三、抽象数据类型(ADT定义实现),30,第三节数据类型,抽象数据类型可以通过固有数据类型(C语言中已实现的数据类型)来实现抽象数据类型 类 class数据对象 数据成员基本操作 成员函数(方法),第章数据结构绪论,一、算法(Algorithm),31,第四节算法分析,算法是对特定问题求解步骤的一种描述是一有限长的操
10、作序列,第章数据结构绪论,一、算法(特性),32,第四节算法分析,有穷性:算法在执行有穷步后能结束确定性:每步定义都是确切、无歧义可行性:每一条运算应足够基本(已验算正确)输入:有0个或多个输入输出:有一个或多个输出,第章数据结构绪论,一、算法(举例),33,第四节算法分析,例子:选择排序问题:递增排序解决方案:逐个选择最小数据算法框架:for(int i=0;i n-1;i+)/n-1趟从ai检查到an-1,找到最小数;若最小整数在ak,交换ai与ak;,第章数据结构绪论,二、算法设计的要求,34,第四节算法分析,正确性:满足具体问题的需求可读性:便于理解和修改健壮性:当输入数据非法时,也能
11、适当反应效率高:执行时间少空间省:执行中需要的最大存储空间,第章数据结构绪论,三、时间复杂度,35,第四节算法分析,衡量算法的效率,主要依据算法执行所需要的时间,即时间复杂度事后统计法:计算算法开始时间与完成时间差值事前统计法:依据算法选用何种策略及问题的规模n,是常用的方法,第章数据结构绪论,三、时间复杂度,36,第四节算法分析,时间复杂度是问题规模n的函数f(n),即:T(n)=O(f(n)一般地,时间复杂度用算法中最深层循环内的语句中的原操作的重复执行次数表示,第章数据结构绪论,三、时间复杂度,37,第四节算法分析,a.y*=x;b.for(i=1;i=n;i+y*=x;c.for(j=
12、1;j=n;j+for(i=1;i=n;i+y*=x;a,b,c三个算法中,“y*=x;”程序段的时间复杂度分别为O(1),O(n),O(n2),分别称为常量阶,线性阶,平方阶,第章数据结构绪论,三、时间复杂度,38,第四节算法分析,时间复杂度除常量阶O(1),线性阶O(n),平方阶O(n2)外,还有对数阶O(logn),排列阶O(n!),指数阶O(2n)等,是相对于问题规模n的增长率的表示方法指数阶随问题规模增长过快,一般不宜使用,第章数据结构绪论,三、时间复杂度,39,第四节算法分析,如果算法的执行有多种可能的操作顺序,则求其平均时间复杂度如果无法求取平均时间复杂度,则采用最坏情况下的时间
13、复杂度时间复杂度是衡量算法好坏的一个最重要的标准,第章数据结构绪论,四、空间复杂度,40,第四节算法分析,空间复杂度指算法执行时,所需要存储空间的量度,它也是问题规模的函数,即:S(n)=O(f(n),第章数据结构绪论,第二章线性表,数据结构,深圳大学计算机系 蔡茂国,一、线性数据结构的特点,42,第一节线性表,在数据元素的非空有限集中、存在惟一的一个被称作“第一个”的数据元素(如“”)、存在惟一的一个被称作“最后一个”的数据元素(如“”)、除第一个元素外,每个数据元素均只有一个前驱、除最后一个元素外,每个数据元素均只有一个后继(next)(如“1”的next是“2”,“2”的next是“3”
14、),第章线性表,二、线性表,43,第一节线性表,线性表是最简单的一类线性数据结构线性表是由n个数据元素组成的有限序列,相邻数据元素之间存在着序偶关系,可以写为:(a1,a2,ai-1,ai,ai+1,an-1,an)其中,ai是表中元素,i表示元素ai的位置,n是表的长度,第章线性表,二、线性表,44,第一节线性表,线性表中的元素具有相同的特性,属于同一数据对象,如:1.26个字母的字母表:(A,B,C,D,Z)2.近期每天的平均温度:(30,28,29,),第章线性表,一、顺序表,45,第二节顺序表,顺序表是线性表的顺序表示用一组地址连续的存储单元依次存储线性表的数据元素,第章线性表,b b
15、+1 b+2 b+3 b+4 b+24 b+25,一、顺序表(元素位置),46,第二节顺序表,顺序表数据元素的位置:LOC(a i)=LOC(a i-1)+l LOC(a i)=LOC(a1)+(i-1)*l l表示元素占用的内存单元 数,第章线性表,二、顺序表的定义,47,第二节顺序表,采用C语言中动态分配的一维数组表示顺序表,第章线性表,#define LIST_INIT_SIZE 100/线性表存储空间的初始分配量#define LISTINCREMENT 10/线性表存储空间的分配增量Typedef struct ElemType*elem;/存储空间基址intlength;/当前长度
16、int listsize;/当前分配的存储容量(元素数)Sqlist;,三、顺序表的初始化,48,第二节顺序表,创建一个顺序表L,第章线性表,Status InitList_Sq(Sqlist/InitList_Sq,三、顺序表的插入,49,第二节顺序表,顺序表的插入操作是指在顺序表的第i-1个数据元素和第i个数据元素之间插入一个新的数据元素,即将长度为n的顺序表:(a1,ai-1,ai,an)变成长度为n+1的顺序表:(a1,ai-1,e,ai,an),第章线性表,三、顺序表的插入,50,第二节顺序表,在第3个元素与第4个元素之间插入新元素b需要将最后元素n至第4元素(共7-4+1)都向后移
17、一位置,第章线性表,三、顺序表的插入,51,第二节顺序表,第章线性表,Status ListInsert_Sq(Sqlist/ListInsert_Sq/请注意元素位置数值较元素序号少1,三、顺序表的插入,52,第二节顺序表,在顺序表中插入一个元素,需要向后移动元素个数为:n-i+1平均移动元素数为:n+1 Eis=pi x(n-i+1)i=1,第章线性表,三、顺序表的插入,53,第二节顺序表,当插入位置等概率时,pi=1/(n+1),因此:n+1 Eis=1/(n+1)x(n-i+1)=n/2 i=1顺序表插入操作的时间复杂度为O(n),第章线性表,四、顺序表的删除,54,第二节顺序表,顺序
18、表的删除操作是指将顺序表的第i个数据元素删除,即将长度为n的顺序表:(a1,ai-1,ai,ai+1,an)变成长度为n-1的顺序表:(a1,ai-1,ai+1,an),第章线性表,四、顺序表的删除,55,第二节顺序表,将第4个元素删除需要将最后元素n至第5元素(共7-4)都向前移一位置,第章线性表,四、顺序表的删除,56,第二节顺序表,第章线性表,Status ListDelete_Sq(Sqlist/ListDelete_Sq,四、顺序表的删除,57,第二节顺序表,在顺序表中删除一个元素,需要向前移动元素个数为:n-i平均移动元素数为:n Edl=qi x(n-i)i=1,第章线性表,四、
19、顺序表的删除,58,第二节顺序表,当插入位置等概率时,qi=1/n,因此:n Edl=1/n x(n-i)=(n-1)/2 i=1顺序表删除操作的时间复杂度为O(n),第章线性表,五、顺序表的优缺点,59,第三节链表,优点:元素可以随机存取元素位置可用一个简单、直观的公式表示并求取缺点:在作插入或删除操作时,需要移动大量元素,第章线性表,一、链表,60,第二节线性链表,链表是线性表的链式存储表示链表中逻辑关系相邻的元素不一定在存储位置上相连,用一个链(指针)表示元素之间的邻接关系线性表的链式存储表示主要有三种形式:线性链表循环链表双向链表,第章线性表,二、线性链表,61,第二节线性链表,线性链
20、表的元素称为结点(node)结点除包含数据元素信息的数据域外,还包含指示直接后继的指针域每个结点,在需要时动态生成,在删除时释放,第章线性表,二、线性链表,62,第二节线性链表,动态单独生成结点的线性链表也称单链表线性链表可由头指针惟一确定为了操作方便,有时在线性链表的第一个结点之前附设一个头结点,其数据域可以为空,也可以为线性链表的长度信息。,第章线性表,三、线性链表的定义,63,第二节线性链表,定义一个结点typedef struct LNode ElemType data;/数据域struct LNode*next;/后继指针 LNode,*LinkList;,第章线性表,四、找指定元素
21、,64,第二节线性链表,在线性链表中找第i个元素由于线性链表中元素的存储位置具有随机性,因此,只有从头结点开始,顺链一步步查找,第章线性表,四、找指定元素,65,第二节线性链表,Status GetElem_L(LinkList/GetElem_L,第章线性表,四、找指定元素,66,第二节线性链表,算法时间复杂度主要取决于while循环中的语句频度频度与被查找元素在单链表中的位置有关若1in,则频度为i-1,否则为n因此时间复杂度为O(n),第章线性表,五、线性链表的插入,67,第二节线性链表,在线性链表的第i-1元素与第i元素之间插入一个新元素,第章线性表,s-next=p-next;p-n
22、ext=s;,五、线性链表的插入,68,第二节线性链表,Status ListInsert_L(LinkList/ListInsert_L,第章线性表,五、线性链表的插入,69,第二节线性链表,同样,算法时间复杂度主要取决于while循环中的语句频度频度与在线性链表中的元素插入位置有关因此线性链表插入的时间复杂度为O(n),第章线性表,六、线性链表的删除,70,第二节线性链表,将线性链表的第i元素删除,第章线性表,删除前,p-next=p-next-next,六、线性链表的删除,71,第二节线性链表,Status ListDelete_L(LinkList/ListDelete_L,第章线性表
23、,六、线性链表的删除,72,第二节线性链表,同样,算法时间复杂度主要取决于while循环中的语句频度频度与被删除元素在线性链表中的位置有关因此线性链表删除元素的时间复杂度为O(n),第章线性表,七、静态链表,73,第二节线性链表,线性链表也可以采用静态数组实现与顺序表有两点不同:、每个元素包括数据域和指针域、元素的逻辑关系由指针确定,第章线性表,0 1 2 3 4 5 6 7 8 9 10,数据指针,七、静态链表,74,第二节线性链表,与单链表区别:、静态链表暂时不用结点,链成一个备用链表、插入时,从备用链表中申请结点、删除结点时,将结点放入备用链表,第章线性表,一、循环链表,75,第三节循环
24、链表,循环链表是一种特殊的线性链表循环链表中最后一个结点的指针域指向头结点,整个链表形成一个环。,第章线性表,二、查找、插入和删除,76,第三节循环链表,在循环链表中查找指定元素,插入一个结点或删除一个结点的操作与线性链表基本一致差别仅在于算法中的循环条件不是p-next或p是否为空(),而是它们是否等于头指针(L),第章线性表,一、双向链表,77,第四节双向链表,双向链表也是一种特殊的线性链表双向链表中每个结点有两个指针,一个指针指向直接后继(next),另一个指向直接前驱(prior),第章线性表,二、双向循环链表,78,第四节双向链表,双向循环链表中存在两个环(一个是直接后继环(红),另
25、一个是直接前驱环(蓝),第章线性表,三、双向链表的定义,79,第四节双向链表,定义一个双向链表的结点Typedef struct DuLNode ElemTypedata;struct DuLNode*prior;struct DuLNode*next;DuLNode,*DuLinkList;,第章线性表,对于任何一个中间结点有:p=p-next-priorp=p-prior-next,四、双向链表的插入,80,第四节双向链表,双向链表的插入操作需要改变两个方向的指针,第章线性表,s-next=p;s-prior=p-prior;p-prior-next=s;p-prior=s;,四、双向链表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-4078710.html