欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    第02讲 线性表类型定义与顺序表.docx

    • 资源ID:14751136       资源大小:34.23KB        全文页数:14页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第02讲 线性表类型定义与顺序表.docx

    1、第02讲 线性表类型定义与顺序表数据结构第 2 次课章节名称2.1 线性表的类型定义2.2 线性表的顺序表示和实现目的要求1. 理解线性表的概念;准确掌握线性的基本操作;能够利用基本运算构造出较复杂的运算,以解决实际问题。2. 理解并熟练掌握线性表的顺序存储结构以及线性表的基本操作算法;熟练地通过上机编程练习掌握对线性表顺序存储的操作算法。主要内容与时间概算序号主要内容时间概算1线性表的定义和基本操作15分2利用基本运算构造出较复杂的运算 25分3线性表的顺序存储结构15分4线性表顺序存储的典型操作的算法实现45分 共计100分重点难点重点:1. 线性表的逻辑结构特征和线性表上定义的基本运算;

    2、2. 线性表的顺序存储结构以及基本操作算法;难点:1. 利用基本运算构造出较复杂的运算;2. 线性表顺序存储操作的算法实现。方法手段采用教员课堂讲授、学员上机实验实施教学。在教学过程中应准确解释各个基本概念,清晰地阐明基本概念的内涵和相互联系,授课中应对于重/难点作详细分析,举例阐明讲解解题思路,解题过程,并结合课堂讲授的内容实施上机实验教学任务。(续表)课 堂 提 问1. 什么是线性表?并举出实例。2. 如何表示顺序表中任意一个数据元素的存储位置?3. 如何实现顺序表的插入操作?可分哪几种情况?本 次 课 内 容 总 结1. 线性表是一种典型的线性结构;2. 线性表的基本操作;3. 如何利用

    3、基本运算解决较复杂的运算问题;4. 线性表的顺序存储结构表示;5、顺序表的操作;思考题作业题线性表顺序存储结构插入删除操作时,需要移动大量元素,如何克服?参考资料数据结构辅导与提高,徐孝凯编著,清华大学出版社数据结构习题解答与考试指导,梁作娟等编著,清华大学出版社授课内容第2章 线性表2.1 线性表的类型定义一、线性表的定义线性表是由n(n0)个类型相同的数据元素组成的有限序列。通常表示成下列形式:L=(a1,a2,.,ai-1,ai,ai+1,.,an)其中:L为线性表名称,习惯用大写书写;ai为组成该线性表的数据元素,习惯用小写书写。线性表中数据元素的个数被称为线性表的长度,当n=0时,线

    4、性表为空,又称为空线性表。举例:La=(34,89,765,12,90,-34,22)数据元素类型为int。Ls=(Hello,World,China,Welcome)数据元素类型为string。Lb=(book1,book2,.,book100) 数据元素类型为下面的结构类型:struct bookinfoint No; /图书编号char *name; /图书名称char *auther; /作者名称.; 二、线性表的逻辑特征1. 非空的线性表中,有且仅有一个开始结点 a1无没有直接前趋,并且仅有一个直接后继 a2;2. 有且仅有一个终端结点 an 无没有直接后继,并且仅有一个直接前趋 a

    5、n-1;3. 其余的内部结点 ai(2in-1)都有且仅有一个直接前趋 ai-1 和一个直接后继 ai+1;三、抽象数据类型线性表的定义ADT List 数据对象:D=ai | ai ElemSet, i = 1,2,3,n, n0数据关系:R1= | ai-1 , aiD, i = 2,n线性表的基本操作InitList(&L)操作结果:构造一个空的线性表L。DestroyList(&L)初始条件:线性表L已存在。 操作结果:销毁线性表。ClearList(L)初始条件:线性表L已存在。 操作结果:将L重置为空表。ListEmpty(L)初始条件:线性表L已存在。 操作结果:若L为空表,则返

    6、回 TRUE,否则返回FALSE。ListLength(L)初始条件:线性表L已存在。 操作结果:返回L中数据元素个数。GetElem(L,i,&e)初始条件:线性表L已存在,1iListLength(L)。操作结果:用e返回L中第i数据个元素的值。 LocateElem(L,e,compare( )初始条件:线性表L已存在,compare( )是数据元素判定函数。操作结果:返回L中第1个与e满足关系compare( )的数据元素的位序。 不存在,则返回值为0。PriorElem(L, cur_e, &pre_e)初始条件:线性表L已存在。操作结果:若cur_e是L的数据元素,且不是第一个,则

    7、用pre_e返回它的前驱,否则操作失败,pre_e无定义。NextElem (L,cur_e,&next_e)初始条件:线性表L已存在。操作结果:若cur_e是L的数据元 素,且不是最后一个, 则用next_e返回它的后继,否则操作作失败, next_e无定义。ListInsert(&L,i,e)初始条件:线性表L已存在,1iListLength(L)+1。操作结果:在L中第i个位置之前插入新数据元素e,L长度加1。ListDelete(&L,i,&e)初始条件:线性表L已存在且非空,1i ListLength(L)。 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1。ListT

    8、raverse(L,visit( )初始条件:线性表L已存在。 操作结果:依次对L的每个数据元素调用函数visit( )。一旦visit( )失败, 则操作失败。ADT List四、利用上述定义的操作完成更复杂的操作例1:假设有两个集合A和B分别用两个线性表LA和LB表示。(即:线性表中的数据元素即为集合中的成员),现要求一个新集合 AAB分析:问题可演绎为,要求对线性表作如下操作:扩大线性表LA,将存在于线性表LB中而不存于线性表LA中的数据元素插入到线性表LA中。则思路即为: 1从线性表LB中依次取得每个数据元素;2依值在线性表LA中进行查访; 3若不存在,则插入之。void union(

    9、List &La, List Lb) /将所有在线性表Lb中但不在La中的元素插入到La La_len = ListLength(La); Lb_len = ListLength(Lb); / 求线性表的长度 for (i = 1; i = Lb_len; i+) GetElem(Lb, i, &e); / 取Lb中第i个元素赋给e if ( !LocateElem(La, e, equal( ) ListInsert(&La, + La_len, e); / La中不存在和 e 相同的元素,则插入之 / union例2:假已知一个非纯集合B,(即B中包含有相同元素)试构造一个纯集合A,使A中

    10、只包含B中所有值各不相同的数据元素。(假设B均为有序序列)分析:则思路即为:1创建一个空的线性表LA;2从线性表LB中依次取得每个数据元素;3依值在线性表LA中进行查访; 4若不存在,则插入之。void purge(List &La, List Lb) / 构造La,使其只包含Lb中所有值不相同的元素 InitList(&LA); La_len = ListLength(La); Lb_len = ListLength(Lb); / 求线性表的长度 for (i = 1; i elem=(Elemtype *)malloc(LIST_MAX_LENGTH *sizeof(Elemtype);

    11、/分配空间if (L-elem=NULL) return ERROR; /分配空间不成功L-length=0; /将当前线性表长度置0return OK; /成功返回OK(2)销毁线性表Lvoid DestroyList(SEQLIST *L) if (L-elem) free(L-elem); /释放线性表占据的所有存储空间(3)清空线性表Lvoid ClearList(SEQLIST *L)L-length=0; /将线性表的长度置为0(4)求线性表L的长度int GetLength(SEQLIST L) return (L.length);(5)判断线性表L是否为空int IsEmpty

    12、(SEQLIST L) if (L.length=0) return TRUE; else return FALSE;(6)获取线性表L中的某个数据元素的内容int GetElem(SEQLIST L,int i,Elemtype *e) if (iL.length) return ERROR; /判断i值是否合理*e=L.elemi-1; /数组中第i-1的单元存储着线性表中/第i个数据元素的内容return OK;(7)在线性表L中检索值为e的数据元素int LocateELem(SEQLIST L,Elemtype e) for (i=0;ilength=LIST_MAX_LENGTH)

    13、 return ERROR; /检查是否有剩余空间if (iL-length+1) return ERROR; /检查i值是否合理for (j=L-length-1;j=i-1;i+) /将线性表第i个元素之后的所有元素向后移动L.-elemj+1=L-elemj;L-elemi-1=e; /将新元素的内容放入线性表的第i个位置,L-length+;return OK;插入算法分析:假设pi是在第i个元素之前插入一个元素的概率,则在长度为n的线性表中插入一个元素时所需移动元素次数的期望值(平均次数)为式:不失一般性,我们可以假定在线性表的任何位置上插入或删除元素都是等概率的,即: pi = 1

    14、/(n+1), qi = 1/n ,则式可化简为:(9)将线性表L中第i个数据元素删除int ListDelete(SEQLIST *L,int i,Elemtype *e) if (IsEmpty(L) return ERROR; /检测线性表是否为空if (iL-length) return ERROR; /检查i值是否合理*e=L-elemi-1; /将欲删除的数据元素内容保留在e所指示的存储单元中for (j=i;jlength-1;j+) /将线性表第i+1个元素之后的所有元素向前移动L-elemj-1=L-elemj;L-length-;return OK; 删除算法分析:假设qi是删除第i个元素的概率,则在长度为n的线性表中删除一个元素时所需移动元素次数的期望值(平均次数)为式:不失一般性,我们可假定在线性表的任何位置上删除元素都是等概率的,即: pi = 1/(n+1),qi = 1/n ,则式(2-3)(2-4)可分别化简为 算法ListInsert_Sq, ListDelete_Sq的时间复杂度为均O(n)。备注:


    注意事项

    本文(第02讲 线性表类型定义与顺序表.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开