关于中缀传后缀表达式问题
我初学数据结构,编了一个中缀传后缀表达式的程序,但是输出结果的时候运算符输不出来,只有数字输出。请高手帮忙指点迷津!程序如下:
#include<iostream>
using namespace std;
typedef char SElemType;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
bool InitStack(SqStack &s)
{
s.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!s.base)
return 0;
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return 1;
}//构建一个空栈s
bool Push(SqStack &s,SElemType e)
//进栈
{
if(s.top-s.base>=s.stacksize)
{
s.top=new char;
s.stacksize++;
}
*s.top++=e;
return 1;
}//添加元素
bool Pop(SqStack &s,SElemType &e)
{
if(s.top==s.base)
return 0;
e=*--s.top;
return 1;
}//取栈顶元素并出栈
bool StackEmpty(SqStack s)
{
if(s.base==s.top)
return 1;
else
return 0;
}//判空
int youxianji(char a,SqStack s)
{
if(s.base==s.top)
return 1;
else if(a=='+'||a=='-')
{
if(*(s.top-1)=='('||*(s.top-1)=='+'||*(s.top-1)=='-')
return 1;
else
return 0;
}
else if(a=='*'||a=='/')
{
if(*(s.top-1)=='('||*(s.top-1)=='+'||*(s.top-1)=='-'||*(s.top-1)=='*'||*(s.top-1)=='/')
return 1;
else
return 0;
}
else if(a=='(')
{
return 1;
}
else if(a==')')
{
return 0;
}
else
return 2;
}//优先级函数
bool ExpressionConvert(char *src, char *dest,SqStack &s)
{
int p=0;
if( !StackEmpty (s))
{
cout<<"转换成逆波兰式失败 ";
return 0;
}
for(int i=0;src[i]!='\0';i++)
{
if(src[i]!='+'&&src[i]!='-'&&src[i]!='*'&&src[i]!='/'&&src[i]!='('&&src[i]!=')')
{
dest[p]=src[i];
p++;
continue;
}
else if((src[i]=='+'&&src[i]=='-'&&src[i]=='*'&&src[i]=='/'&&src[i]=='('&&src[i]==')'))
{
if(youxianji(src[i],s)==1)
{
Push(s,src[i]);
continue;
}
if(youxianji(src[i],s)==0)
{
Pop(s,dest[p]);
p++;
continue;
}
}
if(src[i]=='\0')
{
while(!StackEmpty(s))
Pop(s,dest[p]);
p++;
}
}
dest[p]='\0';
return 1;
return 1;
}
void main()
{
SqStack s;
char src[30],dest[30];
cin>>src;
s.base=NULL;
InitStack(s);
if(ExpressionConvert(src,dest,s))
{
for(int k=0;dest[k]!='\0';k++)
{
cout<<dest[k];
}
cout<<endl;
}
else
cout<<"中缀表达式非法!"<<endl;
}