广义表的创建,输出,求广义表的深度

本文介绍了广义表的基础知识,并通过代码详细讲解如何创建广义表,输出广义表以及如何求广义表的深度。重点在于理解和应用递归方法处理原子节点和表节点。
摘要由CSDN通过智能技术生成

广义表的基础理解请参考     广义表的理解

现给出代码和讲解

#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 ->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值