数据结构 ppt课件 链表部分.ppt
《数据结构 ppt课件 链表部分.ppt》由会员分享,可在线阅读,更多相关《数据结构 ppt课件 链表部分.ppt(59页珍藏版)》请在三一办公上搜索。
1、回顾上次课内容,数据结构的相关概念数据的存储结构,逻辑结构存储结构,集合线性结构树形结构图状结构或网状结构,顺序存储结构链接存储结构,算法分析方法,第二章 线性表,主要内容:线性表的类型定义 线性表的顺序表示和实现 线性表的链式表示和实现 线性表的应用举例,线性结构的特点,存在惟一的一个开始结点,称做“第一个”的数据元素存在惟一的一个终端结点,称做“最后一个”的数据元素除第一个外,每个数据元素只有一个前驱除最后一个外,每个数据元素只有一个后继,1.描述:线性表是由n(n=0)个数据元素(结点)a1,a2,.,ai,.,an组成的有限序列。其中,数据元素的个数n定义为表长。当n=0时称为空表,非
2、空的线性表(n0)记为:(a1,a2,.,ai,.,an),一、逻辑结构,注意:1.数据元素ai是一个抽象的符号 2.ai可取各种数据类型 3.同一线性表中的元素必定具有相同的特性,属于同一数 据对象 4.相邻数据元素之间存在序偶关系 5.i是数据元素ai在线性表中的位序(1i n),2.逻辑特征:仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个前驱和一个后继,线性表是一个线性结构,2.1 线性表的类型定义,二、抽象数据类型线性表的定义ADT List 数据对象:D=aiai Elemset,i=1,2,n,n0数据关系:R1=ai-1,ai D,i=2,n基本操作:构造、销毁、置空
3、、判空、获取元素、插入、删除、定位等。ADT Lista1是第一个元素,有且仅有一个直接后继元素a2;an是最后一个元素,有且仅有一个直接前趋元素an-1;其余ai(1in)有且仅有一个直接前趋ai-1,有且仅有一个直接后继ai+1,顺序表示(存储):指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式存储的线性表称其为顺序表。,线性表顺序存储结构示意图,2.2 线性表的顺序表示和实现,数据元素存储位置表示设 a的存储地址为Loc(a),每个数据元素占l个存储地址,则第i个数据元素的地址为:Loc(ai)=Loc(a)+(i-1)*l,1in逻辑上相邻的ai和ai+1以相邻
4、的存储位置。确定起始位置后,顺序表中任一数据元素都可随机存取。顺序表是一种随机存取的存储结构。,高级语言中一般用数组来描述顺序存储。#include#define MAXSIZE 100typedef int ElemType;typedef structElemType aMAXSIZE;int length;Sqlist;因为线性表长度可变,且所需最大空间随问题不同而不同,所以用动态分配的一维数组(P22)。为使得算法简明扼要,暂使用静态数组。,线性表的建立、输出算法,初始化,void initlist(Sqlist*L)L-length=0;,建立顺序表,void creat_sqlis
5、t(Sqlist,void initlist(Sqlist,Sqlist Sl;initlist(,Sqlist Sl;initlist(Sl);,输出顺序表,void outputl(Sqlist L)int i;coutList length L.lengthendl;for(i=0;iL.length;i+)coutL.ai;if(i+1)%10=0)coutendl;coutendl;,(a1,ai-1,ai,an)改变为(a1,ai-1,e,ai,an),表的长度加1,插入:在线性表第i(1i n+1)个位置上插入元素e,线性表主要操作的实现,注意:C语言中的数组下标从“0”开始,因
6、此,若L是Sqlist类型的顺序表,则表中第i个元素是L.ai-1。,void insert_sq(Sqlist,这里的问题规模是表的长度,设它的值为n。该算法的时间主要花费在循环的元素后移语句上,所需移动元素的次数不仅依赖于表的长度,而且还与插入位置有关。i位置 移动次数 1n 2 n-1 i n-i+1 n 1 n+10,插入操作时间复杂度分析,最好情况下:T(n)=O(1)最坏情况下:T(n)=O(n)平均时间复杂度:长度为n的顺序表中,插入一个结点,令E(n)表示移动结点的期望值(移动平均次数),在表中第i个位置插入一个结点移动的次数为n-i+1.其中pi表示在表中第i位置插入结点的概
7、率。Pi1/(n+1)计算得 E(n)=n/2,所以平均时间复杂度为O(n),(a1,ai-1,ai,ai+1,an)改变为(a1,ai-1,ai+1,an)(1 i n),ai+1,an,表的长度减1,删除:在线性表中删除第i个元素,使,ElemType delete_sq(Sqlist,算法的时间复杂度分析与插入算法相似,结点的移动次数也是由表长n和位置i决定。i位置 移动次数 1n-1 2n-2 in-i n-1 1 n 0,删除操作时间复杂度分析,最好情况下:T(n)=O(1)最坏情况下:T(n)=O(n-1)平均时间复杂度:与插入运算相同,其时间主要消耗在了移动表中元素上,删除第i个
8、元素时,其后面的元素 ai+1an 都要向上移动一个位置,共移动了 n-i 个元素,所以平均移动数据元素的次数:在等概率情况下,pi=1/n,则:这说明顺序表上作删除运算时大约需要移动表中一半的元素,显然该算法的时间复杂度为(n)。,顺序表的优点:(1)各结点存储单元物理位置上的邻接关系表示了结点间的逻辑关系,因此,无须增加额外的存储空间表示结点间的逻辑关系。(2)因其为随机存储结构,故可以随机存取表中任一结点。,顺序表的缺点:(1)插入和删除不方便,通常须移动大量结点,效率较低。(2)难以进行连续的存储空间的预分配,尤其是当表变化较大时。,重要结论,在顺序存储表示的线性表中插入或删除一个数据
9、元素,平均约需要移动一半的元素,因此,顺序存储表示仅适用于不经常进行插入和删除操作并且表中元素相对稳定的表,查找:在线性表L中查找值为e的元素,如果存在,返回位置(0),否则返回-1,表示未找到。,int locate_sq(Sqlist L,ElemType e)int i;i=0;while(i=L.length-1,合并:两表分别非递减有序(递增或等值),合并后仍然非递减有序。,void merge_list(Sqlist a,Sqlist b,Sqlist,单链表 循环链表 双向链表 静态链表 单链表应用举例,2.3 线性表的链式表示与实现,线性表的链式表示和实现,链式分配线性表数据元
10、素的存储单元可以不连续,存放数据元素的结点至少包括两个域(数据域、指针域),也可以包含若干个数据域、指针域。单链表:每个结点只有一个指针域链表链接的顺序和数据元素的逻辑顺序一致,结点的物理位置可任意安排头指针:存放第一个结点的存储地址(附加)头结点:在单链表第一个结点之前附设一个结点,head,12345678,5,head,head,头结点,头指针,头指针,空表,head,存储表示typedef struct LNode ElemType data;/数据域 struct LNode*next;/指针域LNode,*linklist;其中linklist等价于LNode*若设 LNode*p
11、,*q;LinkList H;则p,q,H都是指针变量,p-data 表示数据域p-next 表示指针域,线性表的单链表,函数malloc,free(p);,访问结点,指针赋值的操作,P=(LNode*)malloc(sizeof(LNode);产生一个Lnode类型结点,把首地址送给P变量,系统回收P所指向的结点(若干字节),P中无所指向,Lnode*p,s;p-data=20;p-next=null;(s.data=20;s.next=null;用的少),指针指向结点 p=q,指针指向后继 p=q-next,指针移动 p=p-next,指针赋值的操作,p-next=q,p-next=q-n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 ppt课件 链表部分 ppt 课件 部分
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-2157290.html