数据结构14——求广义表深度(严5.30)

Description

试按表头、表尾的分析方法编写求广义表的深度的递归程序。

Input

输入一串以‘(’开始,以‘(’结束的字符串,并且输入的左右括号必须匹配,如:(),(())……

Output

分别输出按表头、表尾分析方法求广义表深度的结果,每个结果占一行。

  • Sample Input 
    ((a,b,(c,(d,e),f)),g)
  • Sample Output
    4
    4

#include<stdio.h>
#include<stdlib.h>

typedef char ElemType;
typedef struct Inode{
	int tag;
	union{
		ElemType data;
		struct Inode *head;
	}val; 
	struct Inode *tail;
}GLNode;

GLNode *CreateGL(char *&p){
	GLNode *g;
	char a=*p++;
	if(a != '\n'){
		g = (GLNode*)malloc(sizeof(GLNode));
		if(a == '('){
			g->tag = 1;
			g->val.head = CreateGL(p);
		}
		else if(a == ')'){
			g = NULL;
		}
		else{
			g->tag = 0;
			g->val.data = a;
		}
	}
	else{
		g = NULL;
	}
	a = *p++;
	if(g != NULL){
		if(a == ',')
			g->tail = CreateGL(p);
		else
		    g->tail = NULL;
	}
	return g;
}

int GLDepth(GLNode *g){
	GLNode *p;
	int maxg = 0, dep;
    if(g->tag == 0)
	    return 0;
	p = g->val.head;
	if(p == NULL)
	    return 1;
	while(p != NULL){
		if(p->tag == 1){
			dep = GLDepth(p);
			if(dep > maxg)
			    maxg = dep;
		}
		p = p->tail;
	}
	return(maxg+1);
}

int main(){
	char s[100];
	gets(s);
	char *p=s;
	int depth;
	GLNode *q;
	q = CreateGL(p);
	depth  = GLDepth(q);
	printf("%d\n%d", depth, depth);
	return 0;
}

题解:1.用指针指向字符串,方便逐个检索;

2.创建广义表:

广义表数据结构

广义表


3.递归求广义表深度

  • 10
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值