struct st *OPERS=NULL; char a[80], outstring[80]; int k, point;
do{
puts("Введіть вираз, що завершується '='):"); fflush(stdin);
/*Введення арифметичного виразу*/ gets(a);
k=point=0;
/*Повторюємо, поки не '=' */ while(a[k]!='\0'&&a[k]!='=')
{
/*Якщо черговий символ – ')', то виштовхуємо зі стеку у вихідний рядок*/
if(a[k]==')') {
/*усі знаки операцій до найближчої дужки, що відкрива-
ється*/
while((OPERS->c)!='(') outstring[point++]=pop(&OPERS);
/*Видаляємо зі стеку дужку, що відкривається*/ pop(&OPERS);
}
/*Якщо черговий символ – літера, то переписуємо її у вихідний рядок*/
if(a[k]>='a'&&a[k]<='z') outstring[point++]=a[k]; /*Якщо черговий символ – '(', то заносимо його у стек*/ if(a[k]=='(') OPERS=push(OPERS, '('); if(a[k]=='+'||a[k]=='-'||a[k]=='/'||a[k]=='*') /*Якщо черговий символ – знак операції, то: */
{/*якщо стек порожній, то записуємо в нього операцію*/ if(OPERS==NULL) OPERS=push(OPERS, a[k]);
/*якщо не порожній*/ else
/*якщо пpіоpитет нової операції більший за пpіоpитет операції на вершині стеку, то заносимо нову операцію у стек*/
if(PRIOR(OPERS->c)<PRIOR(a[k])) OPERS=push(OPERS, a[k]);
/*якщо пpіоpитет менше, то переписуємо у вихідний рядок усі операції з більшим чи pівним пpіоpитетом*/
else { while((OPERS!=NULL)&&(PRIOR(OPERS->c)>=PRIOR(a[k])))
outstring[point++]=pop(&OPERS); /*записуємо у стек нову операцію*/