广义表
定义
广义表是线性表的推广,也称为列表。
广义表的元素可以是子表,子表的元素还可以是子表。
广义表可以是一个递归的表,即广义表也可以是其本身的一个子表
广义表的存储结构
通常使用链式存储结构。常用的链式存储结构有两种,头尾链表的存储结构和扩展线性链表的存储结构。
- 头尾链表的存储结构
广义表中的数据元素可能为原子或广义表,所以需要两种结构的结点:一种是表结点,用以表示广义表,一种是原子结点,用以表示原子。
一个表结点可由3个域组成:标志域、指示表头的指针域、指示表尾的指针域。原子结点只需两个域:标志域和值域。
//广义表的头尾链表存储表示 typedef enum{ATOM,LIST} ElemTag; //ATOM==0原子;LIST==1列表 typedef struct GLNode{ ElemTag tag; //公共部分 union{ AutomType atom; //atom是原子结点的值域 类型为AutomType 自定义 struct{ struct GLNode *hp,*tp; }ptr; //ptr是表结点的指针域 hp指向表头 tp指向表尾。 }; }*GList; //广义表类型
- 扩展线性链表的存储结构
在这种结构中,无论是原子结点还是表结点均由三个域组成。原子结点增加一个tp指针。