广义表及其推广
Posted pigsss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了广义表及其推广相关的知识,希望对你有一定的参考价值。
广义表其实是线性表的一种推广,也属于多重链表,他的元素不仅可以是一个单元素也可以是一个广义表。本文介绍 广义表的存储结构和解析union
广义表的存储结构
typedef struct GNode *GList; struct GNode { int Tag; // 标志域, 0表示节点是单元素,1表示节点是广义表 union // 子表指针域Sublist 与单元素数据域Data复用,即共用存储空间 { ElementType Data; GList SubList; }URegion; GList Next; //指向后继节点 };
这里设置了一个 union 你可以把它看作一个新的结构。
我们用 tag 来区分 是数据域还是指针域
这里节点有两种类型 ,先看term类型图中数据域表示 第二行第二列 值为27
再看表头的Term节点表示这个表有 4行5列 有 7个非零项
这里Term 节点的同一行 ,同一列的循环列表形成 十字链表
这里的head是行的头节点也是列的头节点
注意这里 不论是Term 节点还是 Head节点都有 Down 和 Right 两个指针域 所以我们可以将他们结合成union
这是十字链表解决问题的思路
以上是关于广义表及其推广的主要内容,如果未能解决你的问题,请参考以下文章