求广义表深度(严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 ...
随机推荐
- Go 语言快速开发入门
目录 需求 开发的步骤 linux下如何开发Go程序 MAC下如何开发Go程序 Golang执行流程分析 编译和运行说明 Go程序开发的注意事项 Go语言的转义字符(escapechar) Golan ...
- js动态生成vue组件
代码奉上 install (Vue, options) { Vue.prototype.$message = function (message){ let Constructor = Vue.ext ...
- ATM+购物车项目流程
目录 需求分析 架构设计 功能实现 搭建文件目录 conf配置文件夹 lib公共功能文件夹 db数据文件夹 interface业务逻辑层文件夹 core表现层文件夹 测试 最外层功能(src.py) ...
- python之模块(os、sys、json、subprocess)
目录 os模块 sys模块 json模块 subprocess模块 os模块 os模块主要是与操作系统打交道. 导入os模块 import os 创建单层文件夹,路径必须要存在 os.mkdir(路径 ...
- WPF|快速添加新手引导功能(支持MVVM)
阅读导航 前言 案例一 案例二 案例三(本文介绍的方式) 如何使用? 控件如何开发的? 总结 1. 前言 案例一 站长分享过 眾尋 大佬的一篇 WPF 简易新手引导 一文,新手引导的效果挺不错的,如下 ...
- boost::bind 不能处理函数重载 (error: no matching function for call to 'bind')
前言 最近任务多.工期紧,没有时间更新博客,就水一期吧.虽然是水,也不能太失水准,刚好最近工作中遇到一个 boost::bind 的问题,花费了半天时间来定位解决,就说说它吧. 问题背景 项目中使用了 ...
- GO的日志库log竟然这么简单!
前言 最近在尝试阅读字节开源RPC框架Kitex的源码,看到日志库klog部分,果不其然在Go原生的log库的基础上增加了自己的设计,大体包括增加了一些格式化的输出.增加一些常用的日志级别等. 一番了 ...
- 万字剖析Ribbon核心组件以及运行原理
大家好,本文我将继续来剖析SpringCloud中负载均衡组件Ribbon的源码.本来我是打算接着OpenFeign动态代理生成文章直接讲Feign是如何整合Ribbon的,但是文章写了一半发现,如果 ...
- react-router v6对比react-router v5
简述: 1. react-router v6 原生支持typeScript ; 安装方法 npm install react-router-dom@6 2. react-router v ...
- Tensor的组合与分块
>>> a = torch.Tensor([[1,2],[3,4]])>>> atensor([[1., 2.], [3., 4.]]) >>> ...