第二章 线性表.ppt
《第二章 线性表.ppt》由会员分享,可在线阅读,更多相关《第二章 线性表.ppt(96页珍藏版)》请在麦多课文档分享上搜索。
1、,第二章 线性表,线性表的逻辑结构线性表的顺序存储及实现线性表的链接存储及实现顺序表和单链表的比较线性表的其他存储及实现,本章的基本内容是:,学生成绩登记表,2.1 线性表的逻辑结构,姓 名,英语,数据结构,高数,学号,丁一,96,78,87,0101,李二,87,90,78,0102,张三,67,86,86,0103,孙红,69,81,96,0104,王冬,87,74,66,0105,职工工资登记表,2.1 线性表的逻辑结构,姓 名,岗位津贴,基本工资,奖金,职工号,丁一,600,278,200,0101,李二,300,190,100,0102,张三,300,186,100,0103,孙红,
2、500,218,200,0104,王冬,300,190,100,0105,数据元素之间的关系是什么?,线性表:简称表,是n(n0)个具有相同类型的数据元素的有限序列。 线性表的长度:线性表中数据元素的个数。 空表:长度等于零的线性表,记为:L=( )。 非空表记为:L(a1, a2 , , ai-1, ai , , an),2.1 线性表的逻辑结构,线性表的定义,其中,ai(1in)称为数据元素; 下角标 i 表示该元素在线性表中的位置或序号 。,2.1 线性表的逻辑结构,线性表的图形表示,线性表(a1, a2 , , ai-1, ai , , an)的图形表示如下:,2.1 线性表的逻辑结构
3、,线性表的特性,1.有限性:线性表中数据元素的个数是有穷的。,2.相同性:线性表中数据元素的类型是同一的。,3.顺序性:线性表中相邻的数据元素ai-1和ai之间存在序偶关系(ai-1, ai),即ai-1是ai的前驱, ai是ai-1的后继;a1 无前驱,an无后继,其它每个元素有且仅有一个前驱和一个后继。,线性表的抽象数据类型定义,ADT List Data线性表中的数据元素具有相同类型,相邻元素具有前驱和后继关系 Operation InitList 前置条件:表不存在输入:无功能:表的初始化输出: 无后置条件:建一个空表,2.1 线性表的逻辑结构,DestroyList前置条件:表已存在
4、输入:无功能:销毁表输出:无后置条件:释放表所占用的存储空间 Length 前置条件:表已存在输入:无功能:求表的长度输出:表中数据元素的个数 后置条件:表不变,2.1 线性表的逻辑结构,线性表的抽象数据类型定义,Get前置条件:表已存在输入:元素的序号i功能:在表中取序号为i的数据元素输出:若i合法,返回序号为i的元素值,否则抛出异常后置条件:表不变 Locate前置条件:表已存在输入:数据元素x功能:在线性表中查找值等于x的元素输出:若查找成功,返回x在表中的序号,否则返回0后置条件:表不变,2.1 线性表的逻辑结构,线性表的抽象数据类型定义,Insert前置条件:表已存在输入:插入i;待
5、插x功能:在表的第i个位置处插入一个新元素x输出:若插入不成功,抛出异常后置条件:若插入成功,表中增加一个新元素 Delete前置条件:表已存在输入:删除位置i功能:删除表中的第i个元素输出:若删除成功,返回被删元素,否则抛出异常后置条件:若删除成功,表中减少一个元素,2.1 线性表的逻辑结构,线性表的抽象数据类型定义,Empty前置条件:表已存在输入:无功能:判断表是否为空输出:若是空表,返回1,否则返回0后置条件:表不变 ADT,进一步说明: (1)线性表的基本操作根据实际应用是而定; (2)复杂的操作可以通过基本操作的组合来实现; (3)对不同的应用,操作的接口可能不同。,2.1 线性表
6、的逻辑结构,线性表的抽象数据类型定义,2.2 线性表的顺序存储结构及实现,顺序表线性表的顺序存储结构,例:(34, 23, 67, 43),34,23,67,43,4,2.2 线性表的顺序存储结构及实现,顺序表线性表的顺序存储结构,例:(34, 23, 67, 43),34,23,67,43,4,用什么属性来描述顺序表?,2.2 线性表的顺序存储结构及实现,顺序表线性表的顺序存储结构,例:(34, 23, 67, 43),34,23,67,43,4,如何实现顺序表的内存分配?,如何求得任意元素的存储地址?,0 i-2 i-1 n-1 Max-1,a1,ai-1,ai,an,空闲,长度,2.2
7、线性表的顺序存储结构及实现,顺序表,一般情况下,(a1,a2,, ai-1,ai , , an)的顺序存储:,0 i-2 i-1 n-1 Max-1,a1,ai-1,ai,an,空闲,长度,Loc(ai)=Loc(a1) + (i -1)c,随机存取:在O(1)时间内存取数据元素,2.2 线性表的顺序存储结构及实现,顺序表,一般情况下,(a1,a2,, ai-1,ai , , an)的顺序存储:,2.2 线性表的顺序存储结构及实现,存储结构是数据及其逻辑结构在计算机中的表示; 存取结构是在一个数据结构上对查找操作的时间性能的一种描述。,存储结构和存取结构,“顺序表是一种随机存取的存储结构”的含
8、义为:在顺序表这种存储结构上进行的查找操作,其时间性能为O(1)。,顺序表类的声明,const int MaxSize=100; template /模板类 class SeqList public:SeqList( ) ; /构造函数SeqList(T a , int n); SeqList( ) ; /析构函数int Length( );T Get(int i); int Locate(T x ); void Insert(int i, T x); T Delete(int i); private:T dataMaxSize; int length; ;,2.2 线性表的顺序存储结构及实现
9、,操作接口:SeqList( ),算法描述: SeqList:SeqList( ) length=0; ,2.2 线性表的顺序存储结构及实现,顺序表的实现无参构造函数,0,操作接口:SeqList(T a , int n),顺序表的实现有参构造函数,2.2 线性表的顺序存储结构及实现,5,35,12,24,33,42,template SeqList:SeqList(T a , int n) if (nMaxSize) throw “参数非法“;for (i=0; in; i+ +) datai=ai;length=n; ,2.2 线性表的顺序存储结构及实现,顺序表的实现有参构造函数,算法描述
10、:,操作接口: void Insert(int i, T x) 插入前:(a1, , ai-1, ai, , an) 插入后:(a1, , ai-1, x , ai, , an),顺序表的实现插入,2.2 线性表的顺序存储结构及实现,ai-1和ai之间的逻辑关系发生了变化,顺序存储要求存储位置反映逻辑关系,存储位置要反映这个变化,例:(35,12,24,42),在i=2的位置上插入33。,表满:length=MaxSize 合理的插入位置:1ilength+1(i指的是元素的序号),2.2 线性表的顺序存储结构及实现,顺序表的实现插入,4,35,12,24,42,a1,a2,a3,a4,0 1
11、 2 3 4,42,24,12,33,什么时候不能插入?,1. 如果表满了,则抛出上溢异常; 2. 如果元素的插入位置不合理,则抛出位置异常; 3. 将最后一个元素至第i个元素分别向后移动一个位置; 4. 将元素x填入位置i处; 5. 表长加1;,算法描述伪代码,2.2 线性表的顺序存储结构及实现,顺序表的实现插入,template void SeqList:Insert(int i, T x) if (length=MaxSize) throw “上溢“;if (ilength+1) throw “位置“;for (j=length; j=i; j-)dataj=dataj-1; datai
12、-1=x;length+; ,算法描述C+描述,2.2 线性表的顺序存储结构及实现,顺序表的实现插入,基本语句?,最好情况( i=n+1):基本语句执行0次,时间复杂度为O(1)。 最坏情况( i=1):基本语句执行n+1次,时间复杂度为O(n)。 平均情况(1in+1):时间复杂度为O(n)。,时间性能分析,2.2 线性表的顺序存储结构及实现,顺序表的实现插入,操作接口: T Delete(int i) 删除前:(a1, , ai-1,ai,ai+1,an) 删除后:(a1,ai-1,ai+1, ,an),顺序表的实现删 除,2.2 线性表的顺序存储结构及实现,ai-1和ai之间的逻辑关系发
13、生了变化,顺序存储要求存储位置反映逻辑关系,存储位置要反映这个变化,例:(35, 33, 12, 24, 42),删除i=2的数据元素。,仿照顺序表的插入操作,完成: 1. 分析边界条件; 2. 分别给出伪代码和C+描述的算法; 3. 分析时间复杂度。,2.2 线性表的顺序存储结构及实现,顺序表的实现删 除,5,35,a1,a2,a3,a4,0 1 2 3 4,42,24,12,33,a5,12,24,42,顺序表的实现按位查找,操作接口: T Get(int i),2.2 线性表的顺序存储结构及实现,0 i-2 i-1 n-1 Max-1,a1,ai-1,ai,an,空闲,n,算法描述: t
14、emplate T SeqList:Get( int i ) if (i=1 ,时间复杂度?,顺序表的实现按值查找,操作接口: int Locate(T x ),2.2 线性表的顺序存储结构及实现,5,35,a1,a2,a3,a4,0 1 2 3 4,42,24,12,33,a5,例:在(35, 33, 12, 24, 42) 中查找值为12的元素,返回在表中的序号。,template int SeqList:Locate(T x) for (i=0; ilength; i+)if (datai=x) return i+1; return 0; ,2.2 线性表的顺序存储结构及实现,顺序表的实
15、现按值查找,算法描述:,时间复杂度?,顺序表的优缺点,顺序表的优点: 无需为表示表中元素之间的逻辑关系而增加额外的存储空间; 随机存取:可以快速地存取表中任一位置的元素。,顺序表的缺点: 插入和删除操作需要移动大量元素; 表的容量难以确定,表的容量难以扩充; 造成存储空间的碎片。,2.2 线性表的顺序存储结构及实现,单链表:线性表的链接存储结构。 存储思想:用一组任意的存储单元存放线性表的元素。,2.3 线性表的链接存储结构及实现,单链表,存储特点: 逻辑次序和物理次序不一定相同。 2.元素之间的逻辑关系用指针表示。,2.3 线性表的链接存储结构及实现,例:(a1, a2 ,a3, a4)的存
16、储示意图,单链表,a1 0200,a2 0325,a3 0300,a4,2.3 线性表的链接存储结构及实现,单链表,数据域,指针域,单链表是由若干结点构成的; 单链表的结点只有一个指针域。,data:存储数据元素 next:存储指向后继结点的地址,template struct Node T data;Node *next; ;,2.3 线性表的链接存储结构及实现,单链表,如何申请一个结点?,s=new Node ;,template struct Node T data;Node *next; ;,2.3 线性表的链接存储结构及实现,单链表,s=new Node ;,2.3 线性表的链接存储
17、结构及实现,单链表,如何引用数据元素?,data,如何引用指针域?,next,s-next;,2.3 线性表的链接存储结构及实现,单链表,重点在数据元素之间的逻辑关系的 表示,所以,将实际存储地址抽象。,什么是存储结构?,2.3 线性表的链接存储结构及实现,单链表,头指针:指向第一个结点的地址。 尾标志:终端结点的指针域为空。,2.3 线性表的链接存储结构及实现,单链表,空表和非空表不统一,缺点? 如何将空表与非空表统一?,头结点:在单链表的第以一个元素结点之前附设一个类型相同的结点,以便空表和非空表处理统一。,2.3 线性表的链接存储结构及实现,单链表,非空表,template class
18、LinkList public:LinkList( );LinkList(T a , int n); LinkList( ); int Length( ); T Get(int i); int Locate(T x); void Insert(int i, T x); T Delete(int i); void PrintList( ); private:Node *first; ;,单链表类的声明,2.3 线性表的链接存储结构及实现,单链表的实现按位查找,操作接口: T Get(int i);,核心操作(关键操作):工作指针后移。从头结点(或开始结点)出发,通过工作指针的反复后移而将整个单链
19、表“审视”一遍的方法称为扫描(或遍历)。,2.3 线性表的链接存储结构及实现,first,a1,a2,an,ai,2.3 线性表的链接存储结构及实现,单链表的实现按位查找,算法描述伪代码,template T LinkList:Get(int i) p=first-next; j=1; while (p ,2.3 线性表的链接存储结构及实现,单链表的实现按位查找,算法描述C+描述,单链表的实现插入,操作接口: void Insert(int i, T x);,2.3 线性表的链接存储结构及实现,如何实现结点ai-1、x和ai之间逻辑关系的变化?,算法描述: s=new Node; s-data
20、=x; s-next=p-next; p-next=s;,注意分析边界情况表头、表尾。,单链表的实现插入,2.3 线性表的链接存储结构及实现,first,a1,an,ai,算法描述: s=new Node; s-data=x; s-next=p-next; p-next=s;,由于单链表带头结点,表头、表中、表尾三种情况的操作语句一致。,算法描述伪代码,1. 工作指针p初始化;累加器j清零; 2. 查找第i-1个结点并使工作指针p指向该结点;3. 若查找不成功,说明插入位置不合理,抛出插入位置异常;否则,3.1 生成一个元素值为x的新结点s;3.2 将新结点s插入到结点p之后;,2.3 线性表
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 线性 PPT
