广义表

广义表的头尾链表存储表示:
typedef enum {ATOM, LIST}ElemTag; //ATOM=0:原子;LIST=1:子表
typedef struct GLNode
{
ElemTag tag; //公共部分,用于区分原子节点和表节点
union{ //原子节点和表节点的联合部分
AtomType atom; //atom是原子节点的值域,AtomType由用户定义
struct{struct GLNode *hp,*tp;}ptr;
//ptr是表节点的指针域,ptr.hp和ptr.tp分别指向表头和表尾
};
}*GList; //广义表类型


广义表的此种存储结构有三种特点:
(1)、除空表的表头指针为空外,对任何非空列表,其表头指针均指向一个表节点,且该节点中的hp域指向列表表头(或为原子节点,或为表节点),tp域指向列表表尾(除非表尾为空,则指针为空,否则必为表节点)
(2)、容易分清列表中原子和子表所在层次。
(3)、最高层的表节点个数即为列表的长度。




广义表的扩展线性链表存储表示
ypedef enum {ATOM, LIST}ElemTag; //ATOM=0:原子;LIST=1:子表
typedef struct GLNode
{
ElemTag tag; //公共部分,用于区分原子节点和表节点
union{ //原子节点和表节点的联合部分
AtomType atom; //atom是原子节点的值域,AtomType由用户定义
struct GLNode *hp;
//表节点的表头指针
};
struct GLNode *tp; //相当于线性链表的next,指向下一个元素节点
}*GList;


以上两种结构根据习惯来掌握,掌握一中即可。





























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值