广义表的基本概念
广义表不是考试的重点,只要理解基本概念就行了。
书上介绍的广义表,我觉得简单来理解的话就是狭义的列表,因为书上规定了列表的表头可以是原子或者子表,但是表尾必须是子表,在python中列表则没有这样的规定。
关于广义表的三个重要结论:
(1)列表的元素可以是子表,而子表的元素还可以是子表,也就是说广义表是可以嵌套定义的。
(2)列表可以为其他列表所共享
(3)列表可以是一个递归的表,如E = (a , E)
广义表的两种存储结构
头尾链表存储结构
//广义表的头尾链表存储表示
typedef int AtomType;
typedef enum{ATOM, LIST} ElemTag; //ATOM=0表示原子,LIST=1表示子表
typedef struct GLNode{
ElemTag tag; //公共部分,用于区别是原子还是子表
union {
AtomType atom; //原子结点的数据域
struct {
struct GLNode *hp, *tp;
} ptr; //子表的指针域,分别指向表头和表尾
};
} *GList;
扩展线性链表存储结构
//广义表的扩展线性链表存储表示
typedef enum{ATOM, LIST} ElemTag;
typedef struct GLNode{
ElemTag tag;
union {
AtomType atom;
struct GLNode *hp;
};
struct GLNode *tp;
} *GList;