#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef enum{ATOM, LIST}ElemType;
typedef struct GLNode{
ElemType tag;
union{
char atom;
struct{
struct GLNode *hp,*tp;
}htp;
}atom_htp;
}GLNode;
char s[1000];
void Process(char *str, int len, char ** str1, int *len1, char ** str2, int *len2)
{
int cnt = 0;
int a = 0;
for(int i = 0; i < len; i++)
{
if(str[i]=='(')
cnt++;
if(str[i]==')')
cnt--;
if(cnt == 0 && str[i]==',')
break;
a++;
}
if(a == len)
{
(*str1) = str;
*len1 = a;
(*str2) = NULL;
*len2 = 0;
}
else
{
(*str1) = str;
*len1 = a;
(*str2) = str+a+1;
*len2 = len - a- 1;
}
}
void Create(GLNode **G, char *str, int len)
{
if(len==0) *G = NULL;
else if(len==1)
{
*G = (GLNode *)malloc(sizeof(GLNode));
(*G)->tag = ATOM;
(*G)->atom_htp.atom = str[0];
}
else
{
*G = (GLNode *)malloc(sizeof(GLNode));
(*G)->tag = LIST;
GLNode * p = *G, *q;
char *str1, *str2, *str3;
int len1, len2, len3;//一是当前处理的,二是剩下的,三是起临时作用的
{//脱去括号
str = str + 1;
len = len -2;
}
str2 = str;
len2 = len;
do
{
str3 = str2;
len3 = len2;
Process(str3, len3, &str1, &len1, &str2, &len2);
Create(&(p->atom_htp.htp.hp), str1,len1);
if(len2 != 0)
{
q = (GLNode *)malloc(sizeof(GLNode));
q->tag = LIST;
p->atom_htp.htp.tp = q;
p = q;
}
}while(len2!=0);
p->atom_htp.htp.tp = NULL; } }
int GetHeighth(GLNode* G)
{
int max = -1;
int n;
if(!G)
return 1;
if(G->tag==ATOM)
return 0;
GLNode *p = G;
while(p)
{
n = GetHeighth(p->atom_htp.htp.hp);
max = n>max?n:max;
p = p->atom_htp.htp.tp;
}
return max + 1;
}
int main()
{
scanf("%s",s);
GLNode * G;
Create(&G,s, strlen(s));
int ret = GetHeighth(G);
printf("%d\n%d",ret,ret);
return 0;
}

求广义表深度(严5.30)--------西工大noj的更多相关文章

  1. 广义表操作 (ava实现)——广义表深度、广义表长度、打印广义表信息

    广义表是对线性表的扩展——线性表存储的所有的数据都是原子的(一个数或者不可分割的结构),且所有的数据类型相同.而广义表是允许线性表容纳自身结构的数据结构. 广义表定义: 广义表是由n个元素组成的序列: ...

  2. K阶斐波那契数列--------西工大NOJ习题.10

    K阶斐波那契数列--------西工大NOJ习题.10 原创不易,转载请说明出处!!! 科普:k阶斐波那契数列的0到n-1项需要有初始值. 其中,0到n-2项初始化为0,第n-1项初始化为1. 在这道 ...

  3. 循环队列(严3.30)--------西工大NOJ习题.9

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef struct _Q ...

  4. 二叉排序树的合并(严3.98)--------西工大noj

    二叉排序树的合并有三种方法 先存入数组,然后..... 直接在第二个树上添加第一个数的元素,时间复杂度为O(NlogN) 就像是合并数组一样合并二叉排序树,分别扫描,时间复杂度极低. 第三种我写了一下 ...

  5. 输出以二叉树表示的算术表达式(严6.51)--------西工大noj

    题解 这道题目说的很诡异,其实没有什么把括号补上....仅仅是先序读入,然后中序输出就行了 代码 #include <stdio.h> #include <stdlib.h> ...

  6. 建立二叉树的二叉链表(严6.65)--------西工大noj

    需要注意的点:在创建二叉树的函数中,如果len1==len2==0,一定要把(*T)置为NULL然后退出循环 #include <stdio.h> #include <stdlib. ...

  7. 建立二叉树的二叉链表存储结构(严6.70)--------西工大noj

    #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TreeNode ...

  8. 以十字链表为存储结构实现矩阵相加(严5.27)--------西工大noj

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef int ElemT ...

  9. 基于图的广度优先搜索策略(耿7.11)--------西工大noj.20

    目录 代码 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ...

随机推荐

  1. 小白必看:零基础安装Linux系统(超级详细)

    我们以最新发布的CentOS 8.1为例,学习下如何安装Linux系统 准备工作: 1.一台可以访问互联网的电脑 2.VMware Workstation安装包 3.CentOS8.1镜像(CentO ...

  2. 从防御者视角来看APT攻击

    前言 APT防御的重要性毋庸讳言,为了帮助各位师傅在防御方面建立一个总体认识,本文会将APT防御方法分为三类,分别是:监控.检测和缓解技术,并分别进行梳理,介绍分析代表性技术.这一篇分析现有的监控技术 ...

  3. mysql的命令二

    1.插入数据 格式一:insert into table_name valuse (字段1,字段2): insert test1 values ('wangsan',22,'male'); 格式二:i ...

  4. 基于SqlSugar的开发框架循序渐进介绍(3)-- 实现代码生成工具Database2Sharp的整合开发

    我喜欢在一个项目开发模式成熟的时候,使用代码生成工具Database2Sharp来配套相关的代码生成,对于我介绍的基于SqlSugar的开发框架,从整体架构确定下来后,我就着手为它们量身定做相关的代码 ...

  5. forms组件补充与ModelForm简单使用与cookie与session

    目录 forms组件钩子函数 forms组件字段参数 字段参数 validators详解 choices详解 widget详解 forms组件字段类型 ModelForm简单使用 cookie与ses ...

  6. TypeError: this.getOptions is not a function

    我在vue ui界面中安装版本依赖包后报这个错误 less-loader/sass-loader安装的版本过高 解决办法 删除原有的版本依赖包,安装更低版本的依赖包. 如 @6.0.1为选择安装的版本 ...

  7. 01C语言基础(二)

    Day07 笔记 指针和函数: 栈 帧: 当函数调用时,系统会在 stack 空间上申请一块内存区域,用来供函数调用,主要存放 形参 和 局部变量(定义在函数内部). 当函数调用结束,这块内存区域自动 ...

  8. Java变量, 常量和作用域

    目录 变量 作用域 局部变量 实例变量 类变量 常量 命名规范 视频课程 变量 变量就是可以变化的量 Java是一种强类型的语言, 每个变量都必须声明其类型 Java变量是程序中最基本的存储单元, 其 ...

  9. Docker容器编译安装Nginx

    Docker容器编译安装Nginx,最简单的Nginx配置. 创建容器&进入容器 宿主机2080映射容器的80端口 [root@localhost ~]# docker run -i -d - ...

  10. docker 操作 记录

    docker ps  #查看当前docker容器 docker exec -it  容器名称 sh  进入docker容器 docker stop 停止docker容器