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(")");
}
}
}
为分答题的能有几个是真高手,我相信那某些人水平还不如我,不会请直说。 展开
#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
展开全部
无分,无解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询