- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 它们的三元组、和分别为: i j v i j v i j v 1 1 3 1 2 2 1 2 6 1 4 5 2 1 1 2 1 -1 2 2 -1 3 1 -2 3 2 4 3 1 2 3 2 4 q.data m.data n.data * 3.十字链表 typedef struct OLNode { // 结点结构定义 int i, j; // 该非零元的行和列下标 ElemType e; struct OLNode *right, *down; // 该非零元所在行表 //和列表的后继链域} *OLink;typedef struct { // 链表结构定义 OLink *rhead, *chead; // 行和列链表头指针 int mu, nu, tu;// 稀疏矩阵的行数、列数和非零元个数} CrossList; * 例:矩阵 的十字链表: * 5.4 广义表的定义 广义表(Lists,又称列表)是线性表的推广。 线性表的元素仅限于原子项,原子是作为结构上不可分割的成分,它可以是一个数或一个结构,若放松对表元素的这种限制,容许它们具有其自身结构,这样就产生了广义表的概念。 广义表是n(n=0)个元素a1,a2,a3,…,an的有限序列,其中ai或者是原子项,或者是一个广义表。通常记作LS=(a1,a2,a3,…,an)。LS是广义表的名字,n为它的长度。若ai是广义表,则称它为LS的子表。 习惯上用大写字母表示广义表的名称,用小写字母表示原子。 * 当广义表非空时,称第一个元素a1为LS的表头(表头 可能是原子,也可能是列表),其余元素组成的表 (a2,a3,…,an)是LS的表尾(表尾一定是列表)。 举例: A=()---A是一个空表,其长度为0; B=(e)---B只有一个原子,其长度为1, 表头为e,表尾为空表(); C=(a,(b,c,d))---长度为2 D=(A,B,C)---其长度为3 E=(a,E)---递归表,长度为2。 思考:广义表C的表头和表尾分别是什么? 深度:广义表中括号嵌套的最大层数。 * 3个重要结论: 列表的元素可以是子表,而子表的元素还可以是 子表……,由此列表是一个多层次结构,可用图 形象的表示。用图示表示列表D. A=() B=(e) C=(a,(b,c,d)) D=(A,B,C) E=(a,E) 列表可为其它列表所共享。如D。 列表可以是一个递归的表。如E。 注意()和(())的区别。 D A B C e a b c d C * 5.5 广义表的存储结构 广义表中的元素可能是原子也可能是列表,因此难 以用顺序存储结构,通常采用链式存储结构,每个 数据元素可用一个结点表示。 两种方法: 方法① 表结点: hp指示表头,tp指示表尾 Tag=0 atom 原子结点: Tag=1 hp tp * 其形式定义如下: typedef enum {ATOM,LIST}ElemTag;// ATOM=0原子,LIST=1子表 typedef struct GLNode{ ElemTag tag; union{ AtomType atom;//原子结点的值域 struct {struct GLNode *hp,*tp;}ptr;//ptr是表结点的指针域 } }*Glist; 举例: C=(a,(b,c,d)) * 在这种存储结构中有几种情况: (1)除空表的表头指针为空外,对任何非空列表, 其表头指针均指向一个表结点,且该结点中 的hp域指示列表表头,tp域指向列表表尾; (2)容易分清列表中原子和子表所在层次。 (3)最高层的表结点个数即为列表的长度。 * 方法②:其形式定义如下: typedef enum {ATOM,LIST}ElemTag;// ATOM=0原子,LIST=1子表 typedef struct GLNode{ ElemTag tag; union{ AtomType atom; struct GLNod
文档评论(0)