这是我写的中缀变后缀,输出函数有问题,求助,帮忙改一下,每次输完后缀总多一些莫名其妙的符号,这是为什么呢?输出顺序没有问题! #include "iostream.h" #include "stdio.h" #include "stdlib.h" #include "conio.h" #define MAXSIZE 50 #define MAXSIZECREMENT 20 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define NULL 0
typedef struct{ char *base; char *top; int stacksize; }sqstack;
Initstack(sqstack s) { s.base=(char *)malloc(MAXSIZE * sizeof(char)); if(!s.base) exit(OVERFLOW); s.top=s.base; s.stacksize=MAXSIZE; return OK; }
stackempty(sqstack s) {return(s.top==NULL);}
Gettop(sqstack s,char &e)---------返回e,但不改变top指针 { if(s.top>s.base) e=*s.top; return e;
}
Push(sqstack &s,char e)--------------进栈 { /* if(s.top-s.base=s.stacksize); { s.base=(char *).realloc((*s).base,((*s).stacksize+MAXSIZECREMENT)*sizeof(char)); if(!(s.base) exit(OVERFLOW); s.top=s.base+s.stacksize; s.stacksize+=MAXSIZECREMENT; } */------------------增加空间这段有问题,请改!!!! *(++s.top)=e; return OK; }
Pop(sqstack &s,char &e)------------出栈 { if(s.top==s.base) return ERROR; e=*(s.top--); return OK; }
int Proceed(char &ch1 ,char &ch2)----------判断函数优先级,1高,0低,2是相同 { switch(ch1) { case '@': return 1; case '+': case '-': if(ch2=='*'||ch2=='/') return 1; else return 2;
case '*': case '/': if(ch2=='(') return 1; else return 0; case '(': return 1; default : break;
} return OK; }
Transfer(sqstack &s1) { char ch,e; sqstack R; Initstack(R); Push(R,'@'); cout<<"input string compute:"; cin>>ch; while(ch!='@') { switch(ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': Push(s1,ch);break;
case '(': Push(R,ch);break;
case ')': while(Gettop(R,e)!='(') { Push(s1,Gettop(R,e)); Pop(R,e); } Pop(R,e);----------------------左括号出栈 break;
default : if ((Proceed(Gettop(R,e),ch)==1)) Push(R,ch);--------------高 else { if ((Proceed(Gettop(R,e),ch)==0)) Push(s1,ch);--------------低 else { Push(s1,Pop(R,e));continue;}---------相等后这个输入元素继续和下一个栈头元素再判断优先级,是这个意思,但不知道写的对不对? !!! } break; } cin>>ch;
}
Push(s1,Pop(R,e));----------------最后一个字符入栈S1 return OK; }
display(sqstack s)-------这个函数有问题,因为输完后不停继续输出乱码,并且如果象我写的这样输出是逆序,请帮忙写个从栈底输出的函数!!!!!!!:) { char e; while(!stackempty(s)) { Pop(s,e); printf("%c",e); } }
main() { clrscr(); sqstack s; Initstack(s); Transfer(s); display(s);
}
[此贴子已经被作者于2005-10-6 12:51:07编辑过]