我的老师给了我一个使用堆栈将中缀表达式转换为postfix的赋值。我不太擅长编程,而且我很久没有使用过这种语言了。任何人都可以看看这个程序,我自己写这个没有任何参考。请检查逻辑是否正确以及是否存在语法错误。我问这个是因为我想用我的逻辑编写它,使用下面写的逻辑。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define size 20
int z = 0;`enter code here`
char b[20];char postarr[20];
struct st
{
char a[size];
int top;
}s;
//function to store the postfix expression
void arrpush(char c)
{
while(c != '\0')
{
postarr[z] = c;
z++;
}
}
//function to pop operator from stack based on the priority assigned to each operator
void pop()
{
if(s.top == -1)
printf("Stack Is Empty");
else
{ if(s.a[s.top] == '1')
arrpush('-');
else if(s.a[s.top] == '2')
arrpush('+');
else if(s.a[s.top] == '3')
arrpush('%');
else if(s.a[s.top] == '4')
arrpush('/');
else if(s.a[s.top] == '5')
arrpush('*');
else
arrpush('(');
s.top--;
}
}
//function to push operators on stack
void push(int n)
{
if(s.top > size-1)
printf("Stack Overflow!");
else if(s.top >= -1)
{
s.top++;
if(n == 0)
{
s.a[s.top] == 0;
}
if(n == 1 && s.a[--s.top]<=n)
s.a[s.top] == 1;
else
{
while(s.a[s.top]>n)
{
pop();
s.top--;
}
s.a[s.top]== 1;
}
if(n == 2 && s.a[--s.top]<=n)
s.a[s.top] == 2;
else
{
while(s.a[s.top]>n)
{
pop();
s.top--;
}
s.a[s.top]== 2;
}
if((n == 3 )&& (s.a[--s.top]<=n))
s.a[s.top] == 3;
else
{
while(s.a[s.top]>n)
{
pop();
s.top--;
}
s.a[s.top]== 3;
}
if(n == 4 && s.a[--s.top]<=n)
s.a[s.top] == 4;
else
{
while(s.a[s.top]>n)
{
pop();
s.top--;
}
s.a[s.top]== 4;
}
if(n == 6)
{
while(s.a[s.top]!=0)
{
pop();
s.top--;
}
}
else if(n == 5)
s.a[s.top] == 5;
}
}
int main()
{
int i,j,k;
s.top = -1;
printf("Enter the infix expression : ");
scanf("%s",b);
while(b[i]!= '\0')
{
if(b[i] == '(')
push(0);
else if(b[i] == '-')
push(1);
else if(b[i] == '+')
push(2);
else if(b[i] == '%')
push(3);
else if(b[i] == '/')
push(4);
else if(b[i] == '*')
push(5);
else if(b[i] == ')')
push(6);
else
arrpush(b[i]);
}
//This does not display the postfix expression after conversion
printf("\nThe postfix expression is :\n");
for(i=0;;i++)
{
printf("%c",postarr[i]);
}
}
// sorry for bad code I'm just starting all over again :\