广义表取表头表尾_广义表的深度和长度(C语言)详解
时间: 2023-06-23 18:45:26 浏览: 168
广义表是一种数据结构,它可以看做是一个链表的集合,其中每个节点可以是一个单独的元素或者是一个子表。广义表的深度指的是广义表中嵌套的子表的最大层数,而广义表的长度指的是广义表中元素的总个数。
取广义表的表头和表尾可以使用如下的代码:
```C
typedef struct GLNode{
int tag; // 标志域,0表示单元素,1表示子表
union{
char data;
struct GLNode *sublist;
}val;
struct GLNode *next;
}GLNode, *GList;
// 取广义表的表头
int getHead(GList L, char *head){
if(L == NULL || L->tag == 1) return 0; // 空表或者表头为子表,返回0
*head = L->val.data; // 取出表头元素
return 1;
}
// 取广义表的表尾
int getTail(GList L, GList *tail){
if(L == NULL) return 0; // 空表,返回0
*tail = L->next; // 取出表尾指针
return 1;
}
```
其中,广义表使用链表的形式来存储,每个节点中的tag标志域表示节点的类型,0表示单元素,1表示子表。如果节点是单元素,则val域存储该元素的值;如果节点是子表,则val域存储该子表的头指针。
使用上述代码可以方便地取出广义表的表头和表尾,但是需要注意的是,由于广义表中可能嵌套子表,因此取表尾时需要返回一个指向子表的头指针。
阅读全文