广义表的基础理解请参考 广义表的理解
现给出代码和讲解
#include<stdio.h>
#include<malloc.h>
#define MAXNUM 100 // 输入串的最大长度
char s[MAXNUM];//记录输入串
int index = 0;
int level = 0;//记录当前层数
int maxLevel = 0;//记录最大层数
typedef struct node//原子结点和表结点的存储
{
int tag;
union
{
char data;
struct node* head;
};
struct node* next;
} Node;
Node* setList(); //递归创建一个表
Node* setElement() //用于递归过程中判断当前需要创建原子结点还是表结点
{
Node* h = NULL;
if(s[index] == '(')//发现 ’(’ 说明是一个子表
{
h = setList(); // 返回一个子表
}
else if(s[index] == ')') //只有遇见类似’ ( ) ’的结构时才会走到这一步,使表结点的head指向NULL,(对照setList()函数)
{
index++;
h = NULL;
}
else//原子结点
{
h = (Node*)malloc(sizeof(Node));
h -> tag = 0;
h ->