CH2线性表分析.ppt

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

* */114 (4) 行-列表示法 矩阵的一个非零元素用一个结点表示,每个结点包括五个字段,分别为元素的行下标、列下标、值,以及指向本行下一个非零元素的指针和指向本列下一个非零元素的指针。另外还有行的头指针向量和列的头指针向量,行的头指针向量有m个元素,分别指向代表各行的第一个非零元素的结点。列的头指针向量有n个元素,分别指向代表各列的第一个非零元素的结点。 * */114 * */114 讨论 时间代价和空间代价始终是数据结构与算法设计的最主要因素,然而它们往往是相互对立的。 一个好的设计总是在时间代价和空间代价之间作出了一个好的权衡,而这种权衡的标准需要根据实际计算机的资源情况和求解问题的特点来确定。 顺序表和单链表是两种最简单的数据结构,但是它们的应用非常广泛。本节中对于稀疏矩阵的所有表示都是这两种结构的扩充和组合。 稀疏矩阵本身也是许多复杂结构的抽象。 * */114 2.1 基本概念与ADT 2.2 顺序表示 2.3 链接表示 2.4 应用举例 2.5 矩阵 2.6 广义表与动态存储管理 * */114 广义表是线性表的推广,具有广泛的应用价值。它是表处理语言(例如LISP)的基础结构,也可以用于表示动态存储空间的整体模型。 * */114 从逻辑上看,广义表也是零个或多个元素组成的序列。但是,广义表中的元素允许以不同形式出现:它可以是一个原子(逻辑上不能再分解的元素),也可以又是一个广义表。 作为广义表元素的广义表称作广义表的子(广义)表。一个广义表还允许直接或间接地作为它自身的子(广义)表。 为了区分广义表和原子,可以用圆括号把一个广义表括起来,再用逗号来分隔广义表中的元素。 一个广义表中所包含的元素的个数,称为这个广义表的长度。长度为零的广义表称为空(广义)表。 一个广义表的深度,就是指广义表中所含子表的层数。 广义表 * */114 书写中约定:用大写字母表示广义表,用小写字母表示原子。例如: E=() L=(a,b) A=(x,L)=(x,(a,b)) B=(A,y)=((x,(a,b)),y) C=(A,B)=((x,(a,b)),((x,(a,b)),y)) D=(z,D)=(z,(z,(z…))) * */114 广义表的分类 如果广义表中的元素全部都是原子(例如广义表L),这种广义表就是线性表; 如果广义表中的元素允许有子广义表,但所有各层子广义表均无共享(例如广义表A、B),这种广义表,称为纯表; 在各层子广义表中允许共享的广义表(例如广义表C的子表B中共享了A),称为再入表; 允许(子)广义表直接(或间接)地把作为自己的子广义表时,这样的广义表(例如广义表D),称为递归表。 * */114 广义表的操作 建立一个广义表; 取广义表的头一个元素; 在广义表中插入一个元素, 删除一个元素; 取删除头一个元素后的广义表; 把一个广义表拆成两个部分; 把两个广义表合并成一个新广义表; 周游一个广义表; 拷贝一个广义表; 判别某元素是否原子; 判别两个广义表是否相等; 判别某广义表是否空广义表 …… * */114 广义表的表示方法主要有: 单链表示法 带头结点的单链表示法 * */114 单链表示法 每个结点由三个字段组成:atom,info,link。 其中atom是一标志位: atom=0表示本结点为子广义表,这时字段info存放子广义表中第一个元素所对应结点的地址; atom=1表示本结点为原子,字段info存放本原子的信息(当信息量比较大时,也可以存放本原子信息存放的地址)。 字段link存放与本元素同层的下一个元素所对应结点的地址,当本元素是所在层的最后一个元素时,link=NULL。 * */114 * */114 带头结点的单链表示法 上述单链表示法的一个主要缺点是:如果要删除广义表(或子广义表)中某一元素(例如删除A中的x)则需要搜索广义表中所有结点后才能进行。 解决办法:对每个子广义表,增设一个广义表头结点。 为区分是一般结点或者是表头结点,不妨令表头结点atom字段为-1;表头结点的info字段可以用来存放本广义表(或子广义表)的有关信息,表头结点的link字段指向广义表中第一个元素对应的结点。 * */114 * */114 单链表中的元素的个数是任意的,允许自由变化。 习惯上把这种在使用期间,可自由插入和删除的数据结构称为动态数据结构。 在程序运行过程中,对于动态数据结构结点的分配和回收需要采用动态存储管理的方法。 结点的动态分配与回收 * */114 在前面的讨论中,当单链表插入值为x的元素时,只需调用函数malloc,便能得到一个所需结点的空间,并返回这个结点的起始地址; 在某指针所指向的结点删除后,调用函数free,就

文档评论(0)

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

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

1亿VIP精品文档

相关文档