C语言广义表急!!!高手都别藏着了

这个程序的功能应该是创建一个广义表并遍历输出。但不知道哪错了,能运行但什么结果都没有,高手帮忙改改谢谢。#include"stdio.h"#include"string.... 这个程序的功能应该是创建一个广义表并遍历输出。但不知道哪错了,能运行但什么结果都没有,高手帮忙改改谢谢。
#include "stdio.h"
#include "string.h"
typedef enum { ATOM, LIST}ElemTag ;
typedef struct GLNode{
ElemTag tag;
union{
char atom;
struct{struct GLNode *hp,*tp; }ptr;
}ptr1;

}GLNode,*GList;

void SubString(char *s);
int StrEmpty(char s[]);
void CreateGList(GList L, char *S);
void sever(char *str,char *hstr);
void OutputGList(GList L);
main()
{
GList L;
char s[100]="(a,(b,(c,d)))";
CreateGList(L, s);

OutputGList(L);
getch();
}

int StrEmpty(char s[]){
if(strlen(s)==0) return 1;
else return 0;
}

void sever(char *str,char *hstr){
int n,i=0,k=0;
char ch[100];
n=strlen(str);
do{
++i;
strncpy(ch,str+i-1,1) ;
if(ch==')') ++k;
else if (ch==')') --k;
}while(i<n&&(ch!=','||k!=0));
if(i<n) {
strncpy(hstr,str,i-1);
*(hstr+i)='\0';
strncpy(str,str+i,n-i);
*(str+n-i+1)='\0';
}
else strcpy(hstr,str);
}

void CreateGList(GList L, char *S) {
GList p;
char sub[100] ,hsub[100];
if(StrEmpty(S)) L = NULL;
else{
L=(GList) malloc(sizeof(GLNode));
L->tag=LIST;
p=L;
strncpy(sub,S+1,strlen(S)-2);
*(sub+strlen(S)-1)='\0';
do {
sever(sub, hsub);
if (strlen(hsub)==1) {
p->ptr.hp=(GList)malloc(sizeof(GLNode));
p->ptr.hp->tag=ATOM;
p->ptr.hp->atom=hsub; }
else CreateGList(p->ptr.hp, hsub);
if (!StrEmpty(sub)){
p->ptr.tp=(GList)malloc(sizeof(GLNode));
p=p->ptr.tp; }
} while (!StrEmpty(sub));
p->ptr.tp = NULL; } }

void OutputGList(GList L) {
GList p;
if(!L) printf("()");
else{
if (L->tag==ATOM) printf("%c",L->atom);
else {
printf("(");
p=L;
while(p){
OutputGList(p->ptr.hp);
p=p->ptr.tp;
if(p) printf(",");
}
printf(")");
}
}
}
为分答题的能有几个是真高手,我相信那某些人水平还不如我,不会请直说。
展开
 我来答
匿名用户
2009-04-16
展开全部
无分,无解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式