1、广义表是线性表的推广;
2、线性表的n个元素都是单元素;
3、广义表中的元素不仅可以是一个单元素,也可以是另一个广义表;
结点的定义如下图:
typedef struct GNode * GList;
struct GNode
{
int Tag; //0-结点是单元素,1-结点是广义表
union //同时只能够使用其中一种元素
{
ElementType Data;
GList SubList;
}URegion;
GList Next; //指向下一个结点
};
可以稍作改进:
typedef enum{ATOM, LIST}ElemTag; //ATOM==0,原子;LIST==1,子表
typedef GNode *GList;
struct GNode
{
ElemTag Tag; //公共部分,用于区分原子结点和表结点
union //同时只能够使用其中一种元素
{
ElementType Data;
GList SubList;
}URegion;
GList Next; //指向下一个结点
};
参考:陈越版数据结构教材(广义表的扩展线性链表存储表示),在严蔚敏的教材P109中还有另一种存储方式--广义表的头尾链表存储表示,只需要掌握一种即可;