数据结构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 != 
){
		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
%d", depth, depth);
	return 0;
}

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

2.创建广义表:

广义表数据结构

广义表

3.递归求广义表深度

经验分享 程序员 微信小程序 职场和发展