C语言用栈实现中缀表达式转后缀表达式
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 99
typedef struct node
{
int data;
struct node *pnext;
}NODE,*PNODE;
typedef struct stack
{
PNODE Ptop;
PNODE Pbottom;
}STACK,*PSTACK;
void zhuanghuan(char *pzhong,char *phou);
void chushihua(PSTACK pS);
void push(PSTACK pS,char val);
void bianli(PSTACK pS);
char pop(PSTACK pS);
char Gotop(PSTACK pS);
int main(void)
{
char zhong[MAXSIZE],hou[MAXSIZE];
printf("请输入中缀表达式:\n");
gets(zhong);
zhuanghuan(zhong,hou);
printf("后缀表达式:%s\n",hou);
return 0;
}
char Gotop(PSTACK pS)
{
char g;
if(empty(pS))
{
printf("栈为空");
}
else
{
g=pS->Ptop->data;
}
return g;
}
void zhuanghuan(char *pzhong,char *phou)
{
char ch;
char g;
char c;
int i=0,j=0;
STACK S;
chushihua(&S);
ch=pzhong[i];
while(ch!='\0')
{
switch(ch)
{
case '(':
push(&S,ch);
break;
case ')':
g=Gotop(&S);
while(g!='(')
{
c=pop(&S);
phou[j]=c;
j++;
g=Gotop(&S);
}
c=pop(&S);
break;
case '+':
case '-':
g=Gotop(&S);
while(g!='(')
{
c=pop(&S);
phou[j]=c;
j++;
g=Gotop(&S);
}
push(&S,ch);
break;
case '*':
case '/':
g=Gotop(&S);
while(g!='('&&g!='+'&&g!='-')
{
c=pop(&S);
phou[j]=c;
j++;
g=Gotop(&S);
}
push(&S,ch);
break;
default:
while(ch>='0'<='9')
{
phou[j]=ch;
j++;
ch=pzhong[i];
i++;
}
ch=pzhong[i];
i++;
}
}
while(!empty(&S))
{
c=pop(&S);
phou[j]=c;
j++;
}
phou[j]='\0';
}
void chushihua(PSTACK pS)
{
pS->Ptop=(PNODE)malloc(sizeof(NODE));
if(pS->Ptop==NULL)
{
printf("分配内存失败");
exit(-1);
}
else
{
pS->Pbottom=pS->Ptop;
pS->Ptop->pnext=NULL;
}
return;
}
void push(PSTACK pS,char val)
{
PNODE pnew=(PNODE)malloc(sizeof(NODE));
pnew->data=val;
pnew->pnext=pS->Ptop;
pS->Ptop=pnew;
return;
}
void bianli(PSTACK pS)
{
PNODE p=pS->Ptop;
while(p!=pS->Pbottom)
{
printf("%d\n",p->data);
p=p->pnext;
}
return;
}
bool empty(PSTACK pS)
{
if(pS->Ptop==pS->Pbottom)
return true;
else
return false;
}
char pop(PSTACK pS)
{
char ch;
PNODE p;
if(empty(pS))
{
printf("栈为空");
}
else
{
p=pS->Ptop;
ch=p->data;
pS->Ptop=p->pnext;
free(p);
p=NULL;
return ch;
}
}
代码已经写好了,但不知道哪里错了,求大神帮忙改改。