求广义表表头表尾的c语言代码
时间: 2023-06-15 09:03:19 浏览: 177
广义表可以用链表来表示,每个节点包含两个指针,一个指向下一个节点,一个指向一个子表的头节点。因此,广义表的表头就是链表的头节点,表尾就是链表的尾节点。
以下是一个简单的基于链表的广义表实现,包括求表头和表尾的函数代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int tag; // 0表示元素节点,1表示子表节点
union {
int data; // 元素节点的值
struct node* sublist; // 子表节点的指针
};
struct node* next; // 下一个节点的指针
} Node;
// 求广义表的表头
Node* get_head(Node* list) {
if (list == NULL) {
return NULL;
}
return list;
}
// 求广义表的表尾
Node* get_tail(Node* list) {
if (list == NULL) {
return NULL;
}
Node* p = list;
while (p->next != NULL) {
p = p->next;
}
return p;
}
```
其中,`Node`结构体表示广义表的一个节点,`tag`字段表示节点类型,0表示元素节点,1表示子表节点。`data`字段表示元素节点的值,`sublist`字段表示子表节点的指针,`next`字段表示下一个节点的指针。
`get_head`函数直接返回链表的头节点;`get_tail`函数遍历整个链表,直到找到最后一个节点,然后返回该节点的指针。
阅读全文