ImageVerifierCode 换一换
格式:PPT , 页数:68 ,大小:522KB ,
资源ID:14648181      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14648181.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实用课件第一章PPT资料.ppt)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实用课件第一章PPT资料.ppt

1、均匀性,有序性(线性序列关系),2.1 线性表的类型定义,1.线性表 3)线性表的长度及空表线性表中数据元素的个数n(n0)定义为线性表的长度当线性表的长度为0 时,称为空表。ai 是第i个数据元素,称i为ai 在线性表中的位序。,2.线性表的基本操作 p19p20,1)InitList(&L)初始化,构造一个空的线性表2)ListLength(L)求长度,返回线性表中数据元素个数3)GetElem(L,i,&e)取表L中第i个数据元素赋值给e4)LocateElem(L,e)按值查找,若表中存在一个或多个值为e的结点,返回第一个找到的数据元素的位序,否则返回一个特殊值。5)ListInser

2、t(&L,i,e)在L中第i个位置前插入新的数据元素e,表长加1。6)ListDelete(&L,i,e)删除表中第i个数据元素,e返回其值,表长减1。,线性表的基本操作举例,例2-1 求A=A B P20算法2.1时间复杂度:LocateElem()执行次数 O(ListLength(A)*ListLength(B)例2-2 合并LA 和 LB 到LC中 P20-21算法2.2时间复杂度:ListInsert()执行次数O(ListLength(LA)+ListLength(LB),2.2 线性表的顺序表示和实现 1.顺序表线性表的顺序存储结构,1)在计算机内存中用一组地址连续的存储单元依次

3、 存储线性表中的各个数据元素。2)假设线性表的每个元素需占用L个存储单元,并以所占的第一个单元的存储地址作为数据元素的起始存储位置,则线性表中第i+1个数据元素的存储位置Loc(ai+1)和第i个数据元素的存储位置Loc(ai)之间满足下列关系:Loc(ai+1)=Loc(ai)+L 一般来说,线性表的第i个元素ai的存储位置为:Loc(ai)=Loc(a1)+(i-1)*L 其中Loc(a1)是线性表的第一个数据元素a1的存储位置,通常称作线性表的起始位置或基地址。,1.顺序表线性表的顺序存储结构,3)线性表的顺序存储结构示意图p22图2.2用“物理位置”相邻来表示线性表中数据元素之间的逻辑

4、关系。根据线性表的顺序存储结构的特点,只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取,所以,线性表的顺序存储结构是一种随机存取的存储结构。,#define LIST_MAX_LENTH 100/或者N/或者是一 个 常数typedef struct ElemType int*elem;int length;SqList;SqList L;,2.顺序存储线性表的描述,C语言中静态分配描述 p22,求置空表Status ClearList(,2.顺序存储线性表的描述,C语言中静态分配描述 p22,求长度Status List length(SqList L)length=L.le

5、ngth;return OK;,2.顺序存储线性表的描述,C语言中静态分配描述 p22,初始化Status InitList_ SqList(SqList L)L.elem=(*int)malloc(LIST_MAX_LENGTH*sizeof(int);if(!L.elem)exit(Overflow);L.length=0;,2.顺序存储线性表的描述,C语言中静态分配描述 p22,2.顺序表的描述1)C语言中动态分配描述 p22,#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct ElemType*elem;in

6、t listsize;说明:elem数组指针指向线性表的基地址;length指示线性表的当前长度;listsize指示顺序表当前分配的存储空间大小。当空间不足时,再分配的存储空间增量为 LISTINCREMENT*sizeof(ElemType),2)几个基本操作初始化,p23算法2.3 Status InitList_SqList(SqList,插入 p24算法2.4,Status ListInsert_sq(SqList 需将第n(即L.length)至第i个元素向后移动一个位置。注意:C语言中数组下标从0开始,则表中第i个数据元素是L.elemi-1。,插入 p24算法2.4,函数rea

7、lloc的格式及功能格式:void*realloc(void*p,unsigned size)功能:将p所指向的已分配内存区域的大小 改为size。size可以比原来分配的空间大或小。,插入(续),q=,删除 p24p25算法2.5,Status ListDelete_sq(SqList return OK 需将第i+1至第L.length个元素向前移动一个位置,插入和删除算法时间分析,用“移动结点的次数”来衡量时间复杂度。与表长及插入位置有关。插入:最坏:i=1,移动次数为n最好:i=表长+1,移动次数为0平均:等概率情况下,平均移动次数n/2 删除:i=1,移动次数为n-1最好:i=表长,

8、移动次数为0平均:等概率情况下,平均移动次数(n-1)/2,查找,p25p26算法2.6 int LocateElem_Sq(SqList L,ElemType e)i=1;while(i=L.length,查找的另一种描述,i=1;p=L.elem;while(i=L.length,合并 P26算法2.7的另外一种描述,void MergeList_Sq(SqList La,SqList Lb,SqList,合并 P26算法2.7,void MergeList_Sq(SqList La,SqList Lb,SqList,建立,#define LIST_INIT_SIZE 100Status

9、CreateList_Sq(SqList,递增插入,Status OrderInsert_Sq(SqList,递减插入,Status DeOrderInsert_Sq(SqList,4.顺序表的分析,1)优点顺序表的结构简单顺序表的存储效率高,是紧凑结构顺序表是一个随机存储结构(直接存取结构)2)缺点在顺序表中进行插入和删除操作时,需要移动数据元素,算法效率较低。对长度变化较大的线性表,或者要预先分配较大空间或者要经常扩充线性表,给操作带来不方便。原因:数组的静态特性造成,作业,2.1 编写程序,建立并显示一个有10个数据元素的顺序线性表。2.2 实现顺序线性表的插入、查找、删除等 算法。,顺

10、序表之整体概念:,elem,0,1,length-1,listsize,length,数组下标,内存状态,变量,操作算法,listsize-1,初始化操作,插入操作,删除操作,查找操作,排序操作,.,.,.,.,空闲,表区,elem,顺序表之整体概念:,顺序表有下列缺点:(1)插入、删除操作时需要移动大量元素,效率较低;(2)最大表长难以估计,太大了浪费空间,太小了容易溢出。因此,在插入和删除操作是经常性操作的应用场合选用顺序存储结构不太合适,此时可以选用链式存储结构,数据元素之间的逻辑关系由结点中的指针来指示。,2.3 线性表的链式表示和实现1.线性链表,特点:在内存中用一组任意的存储单元来

11、存储线性表的数据元素,用每个数据元素所带的指针来确定其后继元素的存储位置。这两部分信息组成数据元素的存储映像,称作结点。结点:数据域+指针域(链域)链式存储结构:n个结点链接成一个链表线性链表(单链表):链表的每个结点只包含一个指针域。,data,next,单链表(Singly Linked List),first 头指针last 尾指针,指针为空单链表由头指针唯一确定,因此常用头指针的名字来命名。如表first.,单链表的存储映像,1)线性链表的描述 p28,typedef struct LNode ElemType data;Struct LNode*next;LNode,*LinkLis

12、t;LinkList L;/L是LinkList类型的变量,表示单链表的头指针,2)术语,头指针:指向链表中第一个结点第一个数据元素结点(开始结点)头结点:有时在单链表的第一个数据元素结点之前附设一个结点,称之头结点。头结点的next域指向链表中的第一个数据元素结点。对于头结点数据域的处理:a.加特殊信息 b.置空 c.如数据域为整型,则在该处存放链表长度信息。,3)带头结点的单链表示意图 p28图2.7,由于开始结点的位置被存放在头结点的指针域中,所以对链表第一个位置的操作同其他位置一样,无须特殊处理。无论链表是否为空,其头指针是指向头结点的非空指针,因此对空表与非空表的处理也就统一了,简化

13、了链表操作的实现。,非空表 空表,2.基本操作,1)取元素 p29 算法2.82)插入元素 p30 算法2.9 3)删除元素 p30 算法2.104)建立链表 p30p31 算法2.115)有序链表的合并 p31 算法2.126)查找(按值查找)7)求长度8)集合的并运算,取元素(按序号查找)p29 算法2.8 从链表的头指针出发,顺链域next逐个结点往下搜索,直至找到第i个结点为止(j=i),Status GetElem_L(LinkList L,int i,ElemType,插入元素p30 算法2.9在第i个元素之前插入,先找到第i-1个结点,Status ListInsert_L(Li

14、nkList,e,s,P-next=s,(2),(3),p,s-next=p-next,a,(1),b,在带表头结点的单链表 第一个结点前插入新结点,newnodenext=pnext;if(pnext=NULL)last=newnode;pnext=newnode;,删除元素p30 算法2.10,Status ListDelete_L(LinkList,q=pnext;pnext=qnext;delete q;if(pnext=NULL)last=p;,从带表头结点的单链表中删除第一个结点,建立链表(头插法建表)p31 算法2.11在链表表头插入新结点,结点次序与输入次序相反。,void C

15、reateList_L(LinkList 尾插法建表:将新结点插到链表尾部,须增设一个 尾指针last,使其始终指向当前链表 的尾结点。,合并有序链表p31 算法2.12,void MergeList_L(LinkList La,LinkList Lb,LinkList,查找(按值查找),int LinkLocate_L(LinkList L,int x)int i;LinkList p;p=L-next;i=1;while(p!=NULL,求长度,int LinkLength_L(LinkList L)int j;j=0;while(p)p=p-next;j+;return(j);p=NULL与p-next=NULL是不同的。总结:带头结点:链表置空 L-next=NU

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1