广义表是一种数据结构,是线性表的推广。也有人称之为列表(lists)。广泛的用于人工智能等领域的表处理结构。
对于广义表,我们需要了解它的结构,通过学习广义表,也加深了对递归的了解。整个广义表都是了利用递归的特性实现的。
(一)首先我们要确定表中每个节点的结构,因为在广义表中有三种不同结构的节点,我们可以使用枚举enum列出我们所用到的结构节点类型。
enum Type
{
HEAD,
SUB,
VALUE
};
(二)有了type类型,只要定义一个type类型的一个对象就可以轻松定义不同类型的节点。
struct GeneralizedNode
{
Type _type;
union
{
int _value;
GeneralizedNode* _SubLink;
};
GeneralizedNode* _next;
GeneralizedNode(Type type)
{
if (type == HEAD)
{
_type = HEAD;
_next = NULL;
}
else if (type == VALUE)
{
_type = VALUE;
_value = 0;
_next = NULL;
}
else
{
_type = SUB;
_SubLink = NULL;
_next = NULL;
}
}
};
我们可以看到一个广义表节点的结构就定义出来了。对于HEAD类型的节点不需要_value和_SubLink这两个数据成员,但是VALUE类型的节点需要_value,而SUB类型需要_Su