Для выражений в инфиксной форме я знаю алгоритм а вот для постфиксной чето никак не соображу

Напишите просто на словах что запихиваем в стек что и когда вынимаем и тд...
//строка с выражением после работы программы результат ab+lb/e-e* очевидно не правильно
char p[]="(a+b)*l/b-e",*po=p,c,*o,*s,t;
char Stack[Len],*ST=Stack;
//для записи в стек
char *PtoS( char c)
{
*(++ST)=c;
return ST;
}
//для извлечения из стека
char *PoP(void)
{
char *c0;
c0=ST;
ST--;
return c0;
}
int main()
{
PtoS('(');
while(*po)
{
if( *po=='+'||*po=='-')i=1;
if( *po=='*'||*po=='/')i=2;
if(isalpha(*po))printf("%c",*po);
if((*po=='+'||*po=='-'||*po=='*'||*po=='/'||*po=='(')&&(i>k||i==k))
{
if( *po=='+'||*po=='-')k=1;
if( *po=='*'||*po=='/')k=2;
PtoS(*po);
}
if(i<k)
{
printf("%c",*PoP());
PtoS(*po);
}
if (*po==')')
{
while((c=*PoP())!='(')
printf("%c",c);
}
po++;
//if(!*po)while((c=*PoP())!='(')printf("%c",c);
}
while((c=*PoP())!='(')printf("%c",c);
return 0;
}
Вроде все делал согласно алгоритму.
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define Len 2056
#define NAME 5
#define COM 4
#define MCOM 8
char per[Len]="(a+b)*(c-d)/(e*(q-w))",*pe=per,*pe2=pe,c;
char Stack[Len],*ST=Stack;
int i=0,k=0,m;
int precedence(char symb)
{
switch(symb)
{
case ')':return -1;
case '(':return 0;
case '+':return 1;
case '-':return 1;
case '*':return 2;
case '/':return 2;
//default : return -1;
}
}
int main()
{
*ST='(';
while(*pe)
{
if (isalpha(*pe))printf("%c",*pe);
else
if(*pe=='(')*++ST=*pe;
else
if(*pe==')')
{
while((c=*ST)!='('){ printf("%c",c);ST--;}
--ST;
}
else
if(*pe=='+'||*pe=='-'||*pe=='*'||*pe=='/')
{
while(precedence(*ST)>precedence(*pe)||precedence(*ST)==precedence(*pe))
{
printf("%c",*ST);
ST--;
}
*++ST=*pe;
}
pe++;
if(*pe==0)while(*ST!='(')printf("%c",*ST--);
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define Len 2056
#define NAME 5
#define COM 4
#define MCOM 8
char per[Len]="(a+b)*(c-d)/(e*(q-w))",*pe=per,*pe2=per,c;//ошибка была тут *pe2=pe
char Stack[Len],*ST=Stack;
int i=0,k=0,m;
int precedence(char symb)
{
switch(symb)
{
case ')':return -1;
case '(':return 0;
case '+':return 1;
case '-':return 1;
case '*':return 2;
case '/':return 2;
//default : return -1;
}
}
int main()
{
*ST='(';
while(*pe)
{
if (isalpha(*pe))printf("%c",*pe);
else
if(*pe=='(')*++ST=*pe;
else
if(*pe==')')
{
while((c=*ST)!='('){ printf("%c",c);ST--;}
--ST;
}
else
if(*pe=='+'||*pe=='-'||*pe=='*'||*pe=='/')
{
while(precedence(*ST)>precedence(*pe)||precedence(*ST)==precedence(*pe))
{
printf("%c",*ST);
ST--;
}
*++ST=*pe;
}
pe++;
if(*pe==0)while(*ST!='(')printf("%c",*ST--);
}
return 0;
}
*Stack2[Len],**ST2=Stack2