第五章 数组和广义表.ppt

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

第5章 数组和广义表 wangzs@ 一组“连续的存储区域”,指根据此区域的起点,通过名称及偏移的方式,可以很容易地取到该区域的数据. C语言中一维数组的定义及使用: 类型说明符 数组名[常量表达式]; 例如: int a[10] C语言中二维数组的定义及使用: 类型说明符 数组名[常量表达式][常量表达式]; 例如: int a[3][4] 数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表。 数组的逻辑定义 数组特点 数组结构固定(维数、上下界、元素关系) 数据元素同构 数组的基本操作 数组初始化 数组结构销毁 存数组元素 取数组元素 5.2 数组的顺序表示和实现 数组只需要顺序存储结构 数组不需要插入和删除(移动元素)操作 顺序存储结构可实现随机存取 数组是多维结构,存储器是一维结构,所以存在两种从多维到一维的映象方法。 以行序为主序(低下标优先) 以列序为主序(高下标优先) 以第一行第一列元素的地址作为基地址,其他元素根据基地址和下标计算出存储地址。 矩阵的压缩存储:对于多个值相同的元素只分配一个存储空间,对零元不分配存储空间。 特殊矩阵:值相同的元素或者零元素在矩阵中的分布有一定的规律。 稀疏矩阵:矩阵中存在大量的零元素。 对称矩阵 三角矩阵 问题描述:已知一个稀疏矩阵的三元组表,求该矩阵转置矩阵的三元组表 广义表的定义 例:以下为广义表 A=()   F=(b,(c,d,e))   E=(b,(c),(d,e))   D=(E,A,F)   C=(A,D,F)   B=(a,B)=(a,(a,(a,v...))) 基本操作举例: 求长度GListLength(L);由最外层括弧中的逗号来定 求深度GListDepth(L);括弧嵌套的最深层次 求表头GetHead(L);表中第一个数据元素(单原子或表) 求表尾GetTail(L); “必定”是个广义表(可能为空) 小结 本章学习了线性表的扩展:即数据元素本身也是一个数据结构(线性表)。 要求掌握数组的类型定义、数组的存储表示方法、 特殊矩阵的压缩存储表示方法及其与线性存储结构的对应、稀疏矩阵的压缩存储表示方法及其运算。 另外,要求掌握广义表的定义和广义表的存储结构。 row col val down right 1 1 3 ^ 4 1 8 ^ ^ 2 2 5 ^ ^ 2 3 4 ^ ^ 稀疏矩阵的压缩存储方法--链式存储结构 typedef struct OLNode{ int i,j; ElemType e; struct OLNode *right,*down; }OLNode; *Olink; typedef struct{ Olink *rhead,*chead; int mu,nu,tu; }CrossList; 十字链表 稀疏矩阵的压缩存储方法--链式存储结构 从键盘接收信息建立十字链表算法 1、初始化rhead与chead指针 2、接收信息生成结点 3、将新生成的结点插入到十字链表中   修改同一行的前一个元素的right指针,修改同一列元素的down指针 4 1 8 ^ ^ 2 3 4 ^ ^ m=4,n=3,t=5 1,1,3 2,2,5 2,3,4 4,1,8 2,1,7 1 1 3 ^ ^ 2 1 7 ^ ^ 2 2 5 ^ ^ 矩阵相加 矩阵A+矩阵B可能出现的情况: 1、aij+bij : aij与bij均为非零元若值非零,修改相应的 aij的值;若为零元,则删除aij结点 2、 aij + bij = aij :表示bij为零,则不作任何操作 3、 aij + bij =bij:表示aij为零,则插入bij元素 设pa,pb分别指向矩阵A和矩阵B中行值相等的两个结点 若pa= =Null表示A中无非零元 则: (1)pa= = Null 或者pa-j pb-j 则在A中插入结点bij (2)pa-j pb-j 则pa=pa-right (3)pa-j= =pb-j且pa-e+pb-e !=0 则pa-e= pa-e+pb-e 若pa-e+pb-e =0 则删除pb结点并修改pa同行、同列  的前一个结点的right与down域 此外:需要设定辅助指针:pre 指示pa同一行的前驱结 点;A的每一列的链表上设一个指针hl[j],初值和列链 表的头指针相同,即hl[j]=chead[j] 广义是线性表的推广。广泛地用于人工智能等领域的表处理语言LISP。 广义表也一种线性表,又称

文档评论(0)

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

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

1亿VIP精品文档

相关文档