第2章(线性表)概要.ppt

  1. 1、本文档共93页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章(线性表)概要

* Status ListDelete_DuL(DuLinkList L,int i, ElemType e){ If(!(p=GetElemP_DuL(L,i))) return ERROR; e=s-data; p-prior-next=p-next; p-next-prior= p-prior; //两行的顺序是否可以颠倒? free(p); return Ok; } p * 2.3.3 链表的运算效率分析 1. 查找 因线性链表只能顺序存取,即在查找时要从头指针找起,查找的时间复杂度为 O(n)。 时间效率分析 2. 插入和删除 因线性链表不需要移动元素,在给出某个合适位置的指什后,插入和删除操作所需的时间仅为 O(1)。 但是,如果要在单链表中进行前插或删除操作,由于要从头查找前驱结点,所耗时间复杂度为 O(n)。书中的两个算法的时间复杂度都为O(n) 空间效率分析 链表中每个结点都要增加一个指针空间,相当于总共增加了n 个整型变量,空间复杂度为 O(n)。 * 2.4 应用举例 一元多项式的数学通式? 用抽象数据类型如何描述它的定义? 用C语言如何描述它的定义? 如何编程实现两个一元多项式相加? 一元多项式的表示及相加 (参见教材P39 – 43) 讨论: * 1. 一元多项式的数学通式? 一元多项式的通式可表示为: 分析:一元多项式在计算机内存储时,既可用顺序表存储,又可用链表存储。但当多项式的次数很高且零系数项很多时,则更适于用链表存储(通常设计两个数据域和一个指针域)。系数、指数 和指针 a0 a1 a2 … am-2 am-1 顺序表 链表 am-1 em-1 am-2 em-2 … a0 e0 ^ 或 0.0 -1 … am-1 em-1 ^ a0 e0 * 3. 用C语言如何具体描述它的定义? 法一:用类C语言,参见教材P42 法二:用标准C语言: typedef struct poly_node *poly_pointer; typedef struct poly_node { int coef; int expon; poly_pointer link; }; poly_pointer a, b, c; coef expon link * 实现思路: 依次比较Pa和Pb所指结点中的指数项,依 Pa-expon =、、Pb-expon等情况,再决定是将两系数域的数值相加(并判其和是否为0),还是将较高指数项的结点插入到新表c中。 3 14 2 8 1 0 ^ a Pa 8 14 -3 10 10 6 ^ b Pb 11 14 -3 10 2 8 1 0 ^ c Pc 10 6 + * 本章小结(讨论题形式) 线性表逻辑结构特点是,只有一个首结点和尾结点;除首尾结点外其他结点只有一个直接前驱和一个直接后继。简言之,线性结构反映结点间的逻辑关系是一对一(1:1)的。 问1:线性表的逻辑结构特点是什么?其顺序存储结构和链式存储结构的特点是什么? 答: 顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。 链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针。 * 顺序存储的优点是存储密度大(=1),存储空间利用率高。缺点是插入或删除元素时不方便。 链式存储的优点是插入或删除元素时很方便,使用灵活。缺点是存储密度小(1),存储空间利用率低。 答: 问2:顺序存储和链式存储各有哪些优缺点? 事实上,链表插入、删除运算的快慢是以空间代价来换取时间。 存储密度=结点数据本身所占的存储量/结点结构所占的存储总量 * 问3:在什么情况下用顺序表比链表好? 顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。 若线性表的长度变化不大,且其主要操作是查找,则采用顺序表; 若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。 答: * 顺序表 链表 基于空间考虑 分配方式 静态分配。程序执行之前必须明确规定存储规模,若线性表长度n变化较大,则存储规模难于预先确定,估计过大将造成空间浪费,估计过小又将使空间溢出机会增多。 动态分配。只要内存空间尚有空闲就不会产生溢出,因此当线性表的长度变化较大,难以估计其存储规模时,以采用动态链表作为存储结构为好。 存储密度 =1.当线性表的长度变化不大,易于事先估计其大小时,为了节约存储空间,宜采用顺序存储

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档