第二章 线性表剖析.ppt

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

2.5 用游标实现表 原因:对于有多个同类表的应用,希望通过自主调剂内存资源,达到资源的更有效合理的利用。 实现:从操作系统申请一个较大的数组s,然后自主地支配s中的单元,在s中用游标模拟指针实现表,并让多个同类的表共享这个数组。 如下图: 2.5 用游标实现表 数组S[12]中存放着相同类型的两个表A和B,其中表A含有3个元素;表B含有2个元素。 first1指示s中尚未被使用的子段的起始单元 first2指示S中被使用过单目前处于闲置的单元组成的一条可管理的链,让其中的单元优先于first1指示的子段中的的单元满足应用的需要。 优点: 可实现多个同类的表共享同一片连续存储空间,给用户资源调剂的自主权 缺点: 应该向操作系统申请多大的连续存储空间依赖于具体的应用,不容易把握 2.5 用游标实现表 2.8 表的搜索游标——遍历器 由于指向链表中元素的指针是类的私有成员,无法利用指向表中的指针从表的外部一次访问表中的内容。 许多使用表的应用代码都要求从链表的第一个元素开始,从左至右依次检查每一个元素。 采用搜索游标类Iterator(遍历器)实现从外部对表进行扫描 Iterator可以从左至右对表检查,遍历器的功能是记录当前位置并每次向前移动一个位置。 以单链表为基础建立Iterator类 链表遍历器类 链表遍历器有两个共享成员Initialize和Next。 Initialize返回一个指针,该指针指向第一个链表节点中所包含的数据,同时把私有变量location设置为指向链表的第一个节点,该变量用来跟踪我们在链表中所处的位置。 成员Next用来调整location,使其指向链表中的下一个节点,并返回指向该节点数据域的指针。由于Iterator类访问了List类的私有成员first,所以应把它定义为List的友元类。 链表遍历器类 templateclass T class Iterator { public : T* Initialize(const ListT c) { location = c.first; if (location) return location-data; return 0; } T* Next() { if (!location) return 0; location = location-next; if (location) return location-data; return 0; } private : NodeT *location; } ; 线性表的应用: 一元多项式的表示及相加 符号多项式的表示及其操作是线性表处理的典型用例。 一个一元多项式 Pn(x) 可以表示为 : Pn(x)=p0+p1x+p2x2+…+pnxn (最多有 n+1 项) 它由 n+1 个系数唯一确定。因此,在计算机里,它可用一个 线性表 P 来表示: P = ( p0, p1, p2, …, pn ) 每一项的指数 i 隐含在其系数 pi 的序号里。 假设 Qm(x) 是一元 m 次多项式,同样可用线性表 Q 来示: Q = (q0, q1, q2, …, qm) 若 m n,则两个多项式相加的结果 Rn(x)= Pn(x)+ Qm(x) 可用线性表 R 来表示: R = (p0+ q0, p1+ q1, p2+q2, …, pm+ qm, pm+1, …, pn) 上述只存储系数的方案对存在大量零系数的多项式并不适用。 要用一个长度为 20001 的线性表来表示,表中仅有 3 个 非零系数,会浪费大量存储空间。 例如: S(x) = 1 + 3x10000 + 2x20000 若只存储非零系数项,则必须同时存储相应的指数。 一般情况下,一元 n 次多项式 (只表示非零系数项) : 其中 pi≠0 (i =1, 2, …, m),n = em em-1 … e1 ? 0 若采用一个长度为 m 且每个数据元素有两个数据项(系数项和指 数项)的线性表 (( p1, e1), ( p2, e2), …, ( pm, em)) 便可唯一确定多 项式 Pn(x)。对于 S(x) 类的多项式将大大节省空间。 线性表的应用: 一元多项式的表示及相加 存储形式:若进行不改 变系数和指数的运算,可采用顺序存储结构;否则采用链式存储结构。 例:假设多项式 A17(x)=7+3x+9x8+5x17 与 B8(x)=8x+22x7-9x8 已经用单链表表示,其头指针分别为 A 与 B,如下图所示。 -9 8 ^ 22 7 -1

文档评论(0)

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

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

1亿VIP精品文档

相关文档