已知广义表的结点定义,使用C语言实现创建广义表的递归算法。 广义表的递归定义如下: typedef struct LinkListsNode { int tag; //标志位 union { char atom; //单元素 struct LinkListsNode *Lists; //指向子表的指针 }value; struct LinkListsNode *link; //指向同一层中的后继元素 }LSNode; //广义表结点类型定义
时间: 2024-01-04 14:04:57 浏览: 102
以下是使用C语言实现创建广义表的递归算法的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkListsNode {
int tag; //标志位
union {
char atom; //单元素
struct LinkListsNode *Lists; //指向子表的指针
}value;
struct LinkListsNode *link; //指向同一层中的后继元素
}LSNode; //广义表结点类型定义
// 创建广义表的递归函数
LSNode* create_list() {
LSNode *p;
char c;
scanf("%c", &c);
if (c == '(') {
p = (LSNode*)malloc(sizeof(LSNode));
p->tag = 1;
p->link = NULL;
p->value.Lists = create_list();
}
else if (c == ')') {
p = NULL;
}
else if (c == ',') {
p = create_list();
}
else {
p = (LSNode*)malloc(sizeof(LSNode));
p->tag = 0;
p->link = NULL;
p->value.atom = c;
}
scanf("%c", &c);
return p;
}
int main() {
LSNode *list;
printf("请输入广义表:");
list = create_list();
printf("\n");
return 0;
}
```
在程序中,create_list() 函数是用来创建广义表的递归函数。该函数从标准输入中读取字符,根据读取的字符分别进行不同的处理:
- 如果读取的字符是左括号'(',则说明当前结点是一个子表,创建一个结点并将其 tag 属性设置为 1,表示当前结点为子表,然后递归调用 create_list() 函数创建子表,并将子表的指针存储在当前结点的 value.Lists 属性中。
- 如果读取的字符是右括号')',则说明当前子表已经创建完成,返回空指针。
- 如果读取的字符是逗号',',则说明当前子表还有后继元素,递归调用 create_list() 函数创建下一个元素。
- 如果读取的字符是其他字符,说明当前结点是单元素,创建一个结点并将其 tag 属性设置为 0,表示当前结点为单元素,然后将单元素的值存储在当前结点的 value.atom 属性中。
最后,在 main() 函数中调用 create_list() 函数创建广义表。
阅读全文