3广义表的存储结构 广义表中的数据元素可以是单元素,或是广义表, 很难用顺序存储结构表示,常采用链式存储结构。 表头表尾镀存储结构 有两类结点:表结点和单元素结点。 tag=l hp tp 表结点 tag=0 data 单元素结点 tag标志域,0表示结点为单元素结点,1表示为表结点; hp:表头指针域;tp:表尾指针域;data:值域
3 广义表的存储结构 广义表中的数据元素可以是单元素,或是广义表, 很难用顺序存储结构表示,常采用链式存储结构。 1.表头表尾链存储结构 有两类结点:表结点和单元素结点。 ┌───┬────┬───┐ │tag=1 │ hp │ tp │ 表结点 └───┴────┴───┘ ┌───┬────────┐ │tag=0 │ data │ 单元素结点 └───┴────────┘ tag标志域,0表示结点为单元素结点,1表示为表结点; hp:表头指针域; tp:表尾指针域; data: 值域
3广义表的存储结构 形式描述为: typedef enum( ATOM, LIST )ElemTag typedef struct GLNode{//定义广义表结点 ElemTage tag;//公共部分,用以区分 原子结点和表结点 Union{//原子结点和表结点的联合部分 AtomType atom;//原子类型结点域, // AtomType由用户定义 Struct struct GLNode *hp, *tp; ptr; y //表结点的指针域, //ptr.hp与ptr.tp分别指向广义表的表头和表尾。 }* Glist;//广义表类型
3 广义表的存储结构 形式描述为: typedef enum{ ATOM, LIST }ElemTag typedef struct GLNode { //定义广义表结点 ElemTage tag; //公共部分,用以区分 原子结点和表结点 Union{ //原子结点和表结点的联合部分 AtomType atom;//原子类型结点域, // AtomType由用户定义 Struct { struct GLNode *hp, *tp; }ptr; }; //表结点的指针域, //ptr.hp 与ptr.tp分别指向广义表的表头和表尾。 }*Glist; //广义表类型