POLISH

#include "stdafx.h" #include<stdio.h> #include<conio.h> #include<ctype.h> #define MAX 50 //максимальная глубина стека typedef struct stack { int data[MAX]; int top; }stack; int prior(char x) //определяет приоритет текущей операции { if (x == '(') return(0); if (x == '+' || x == '-') return(1); if (x == '*' || x == '/' || x == '%') return(2); return(3); } void init(stack *s) { s->top = -1; } int empty(stack *s) //проверка непустоты стека { if (s->top == -1) return(1); return(0); } int full(stack *s) //проверка полноты стека { if (s->top == MAX - 1) return(1); return(0); } void push(stack *s, int x) //добавляет элемент в стек { s->top = s->top + 1; s->data[s->top] = x; } int pop(stack *s) { int x; x = s->data[s->top]; s->top = s->top - 1; return(x); } int top(stack *p) //значение верхнего элемента стека { return (p->data[p->top]); } void main() { char infix[30], postfix[30]; printf("Enter an infix expression: \n"); scanf("%s", &infix); //считываем всю входную строку stack s; char x, token; int i, j; //i - номер символа в инфиксе, j - номер символа в постфиксе init(&s); //инициализируем указатель на стек j = 0; for (i = 0; infix[i] != '\0'; i++) //бежим по строке, пока она не кончится { token = infix[i]; //isalnum возвращает ненулевое значение, если его аргумент является либо буквой ал­фавита (верхнего или нижнего регистра), либо цифрой. //Если символ не является буквенно-циф­ровым, возвращается 0. if (isalnum(token)) postfix[j++] = token; else if (token == '(') push(&s, '('); else if (token == ')') //если ')', печатаем все до '(' while ((x = pop(&s)) != '(') postfix[j++] = x; else { while (prior(token) <= prior(top(&s)) && !empty(&s)) //пока приоритет текущего символа не превышает приоритета верхнего элемента стека { x = pop(&s); postfix[j++] = x; } push(&s, token); } } while (!empty(&s)) //печатаем все оставшиеся в стеке элементы { x = pop(&s); postfix[j++] = x; } postfix[j] = '\0'; printf("\nPostfix expression: %s", postfix); getch(); }

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.