哪位C语言高手帮忙看一下
下面这个广义表有什么错误啊?为什么(a,(b,(c,(d,())),e))这个表建立不了呢?#include<stdio.h>#include<stdlib.h>#def...
下面这个广义表有什么错误啊?
为什么(a,(b,(c,(d,())),e))这个表建立不了呢?
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
typedef enum{ATOM, LIST}ElemTag;
typedef struct GLNode
{
int tag;
union
{
char atom;
struct GLNode *sublist;
};
struct GLNode *next;
}GList;
void CreateGList(GList **gl);
int main(void)
{
GList *gl;
CreateGList(&gl);
return 0;
}
void CreateGList(GList **gl)
{
char ch;
scanf("%c", &ch);
if(ch == '\n')
{
*gl = NULL;
}
else if(ch == '(')
{
*gl = (GList *)malloc(sizeof(GList));
(*gl)->tag = LIST;
CreateGList(&((*gl)->sublist));
}
else if(ch>=97&&ch<=122)
{
*gl = (GList *)malloc(sizeof(GList));
(*gl)->tag = ATOM;
(*gl)->atom = ch;
}
if(ch!=')')
scanf("%c", &ch);
if((*gl) == NULL)
{
;
}
else if(ch == ',')
{
CreateGList(&((*gl)->next));
}
else if(ch == ')')
{
(*gl)->next = NULL;
}
}
我又写了一个打印函数,不知道怎么改
谁能再帮我改一下?
void PrintGList(GList *gl)
{
if(gl->tag == LIST)
{
printf("(");
if(gl->sublist == NULL)
{
;
}
else
{
PrintGList(gl->sublist);
}
printf(")");
}
else
{
printf("%c", gl->atom);
}
if(gl->next != NULL)
{
printf(", ");
PrintGList(gl->next);
}
} 展开
为什么(a,(b,(c,(d,())),e))这个表建立不了呢?
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
typedef enum{ATOM, LIST}ElemTag;
typedef struct GLNode
{
int tag;
union
{
char atom;
struct GLNode *sublist;
};
struct GLNode *next;
}GList;
void CreateGList(GList **gl);
int main(void)
{
GList *gl;
CreateGList(&gl);
return 0;
}
void CreateGList(GList **gl)
{
char ch;
scanf("%c", &ch);
if(ch == '\n')
{
*gl = NULL;
}
else if(ch == '(')
{
*gl = (GList *)malloc(sizeof(GList));
(*gl)->tag = LIST;
CreateGList(&((*gl)->sublist));
}
else if(ch>=97&&ch<=122)
{
*gl = (GList *)malloc(sizeof(GList));
(*gl)->tag = ATOM;
(*gl)->atom = ch;
}
if(ch!=')')
scanf("%c", &ch);
if((*gl) == NULL)
{
;
}
else if(ch == ',')
{
CreateGList(&((*gl)->next));
}
else if(ch == ')')
{
(*gl)->next = NULL;
}
}
我又写了一个打印函数,不知道怎么改
谁能再帮我改一下?
void PrintGList(GList *gl)
{
if(gl->tag == LIST)
{
printf("(");
if(gl->sublist == NULL)
{
;
}
else
{
PrintGList(gl->sublist);
}
printf(")");
}
else
{
printf("%c", gl->atom);
}
if(gl->next != NULL)
{
printf(", ");
PrintGList(gl->next);
}
} 展开
展开全部
路过 看看 不太在行 加点分
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该系else if(ch == ',') ,不清楚。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询