求广义表深度(严5.30)--------西工大noj

#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的更多相关文章
- 广义表操作 (ava实现)——广义表深度、广义表长度、打印广义表信息
广义表是对线性表的扩展——线性表存储的所有的数据都是原子的(一个数或者不可分割的结构),且所有的数据类型相同.而广义表是允许线性表容纳自身结构的数据结构. 广义表定义: 广义表是由n个元素组成的序列: ...
- K阶斐波那契数列--------西工大NOJ习题.10
K阶斐波那契数列--------西工大NOJ习题.10 原创不易,转载请说明出处!!! 科普:k阶斐波那契数列的0到n-1项需要有初始值. 其中,0到n-2项初始化为0,第n-1项初始化为1. 在这道 ...
- 循环队列(严3.30)--------西工大NOJ习题.9
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef struct _Q ...
- 二叉排序树的合并(严3.98)--------西工大noj
二叉排序树的合并有三种方法 先存入数组,然后..... 直接在第二个树上添加第一个数的元素,时间复杂度为O(NlogN) 就像是合并数组一样合并二叉排序树,分别扫描,时间复杂度极低. 第三种我写了一下 ...
- 输出以二叉树表示的算术表达式(严6.51)--------西工大noj
题解 这道题目说的很诡异,其实没有什么把括号补上....仅仅是先序读入,然后中序输出就行了 代码 #include <stdio.h> #include <stdlib.h> ...
- 建立二叉树的二叉链表(严6.65)--------西工大noj
需要注意的点:在创建二叉树的函数中,如果len1==len2==0,一定要把(*T)置为NULL然后退出循环 #include <stdio.h> #include <stdlib. ...
- 建立二叉树的二叉链表存储结构(严6.70)--------西工大noj
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TreeNode ...
- 以十字链表为存储结构实现矩阵相加(严5.27)--------西工大noj
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef int ElemT ...
- 基于图的广度优先搜索策略(耿7.11)--------西工大noj.20
目录 代码 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ...
随机推荐
- windows下载安装JDK8
一 .下载链接 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 根据自己的电脑安 ...
- python网络自动化ncclient模块,netconf协议检索与下发交换机配置
以juniper和华为设备为例 交换机必要配置,配置简单,使用ssh模式传输 #juniperset system services netconf ssh#华为 local-user netconf ...
- spring boot 默认日志替换为 log4j
移除默认日志 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- JZOJ 5409 Fantasy & NOI 2010 超级钢琴 题解
其实早在 2020-12-26 的比赛我们就做过 5409. Fantasy 这可是紫题啊 题目大意 给你一个序列,求长度在 \([L,R]\) 区间内的 \(k\) 个连续子序列的最大和 题解 如此 ...
- 一文掌握软件安全必备技术 SAST
上一篇文章中,我们讨论了软件供应链的概念并了解到近年来软件供应链安全事件层出不穷.为了保障软件供应链安全,我们需要了解网络安全领域中的一些主要技术.本篇文章将介绍其中一个重要技术--SAST. 当开发 ...
- markdown常用到的语法
一.标题 后加文字,几个#代表几级标题,最高为6 ,标准语法一般在#后跟个空格再写文字. 二.分割线 三个或者三个以上的 - 或者 * 三.图片 格式:  A ...
- powershell命令总结
2021-07-21 初稿 ps命令采用动词-名词的方式命名,不区分大小写.默认当前文件夹为当前路径./.除去-match使用正则表达式匹配外,其他都使用*和?通配符. 速查 管道命令 前一个的输出作 ...
- linux在线安装和配置JDK1.8
首先在服务器ping www.baidu.com查看是否可以连网 然后就可以在线下载 一.下载安装JDK1.8 1.在下载安装的同时做一些准备工作 我们在usr目录下再创建一个Java文件夹准备放置我 ...
- 使用Karmada实现Helm应用的跨集群部署
摘要:借助Karmada原生API的支持能力,Karmada可以借助Flux轻松实现Helm应用的跨集群部署. 本文分享自华为云社区< 使用Karmada实现Helm应用的跨集群部署[云原生开源 ...
- Windows 通过本地计算机IP链接Mysql设置
前言 1.Mysql-1130错误:无法远程连接 错误:ERROR 1130: Host '192.168.1.3' is not allowed to connect to thisMySQL se ...