- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAX 300
struct stack {
char alpha;
struct stack *nxtPTR;
};
typedef struct stack Stack;
typedef Stack *node;
void message(void);
char out_print(char word[]);
int precedence_power(int res_1, int res_2);
int pop(node *topPtr);
void push_stack(node *topPTR, char value);
int pop(node *topPTR);
char check_stack(node data);
int isOperator(char c);
int precedence(char data_1, char data_2, int(intro_precedence_power)(int res_1, int res_2));
void converting(char *in, char *out, node *PTR, char (checking_stack)(node), void (push)(node *topPTR, char value), int (pop)(node *fix), int (isOper)(char c), int (precedence_intro)(char data_1, char data_2, int(intro_precedence_power)(int res_1, int res_2)), int(intro_precedence_power)(int res_1, int res_2));
void please_enter(void );
int main(void) {
char infix[MAX];
char postfix[MAX];
node topPTR = NULL;
fgets(infix, sizeof(infix), stdin);
int m = strlen(infix);
infix[m] = ')';
memset(postfix, 0, MAX);
converting( infix, postfix, &topPTR, check_stack, push_stack, pop, isOperator, precedence, precedence_power);
out_print(postfix);
puts(" ");
return 0;
}
char out_print(char word[]) {
if( word[0] != '\0' ){
printf( "%c " , word[0] ) ;
return out_print(word + 1 ) ;
}
}
void push_stack(node *topPTR, char value) {
node newPTR = malloc(sizeof(Stack));
if (newPTR != NULL) {
newPTR->alpha = value;
newPTR->nxtPTR = *topPTR;
*topPTR = newPTR;
}
else {
puts("error");
}
}
int pop(node *fix) {
int value = (*fix)->alpha;
node temp = *fix;
*fix = (*fix)->nxtPTR;
free(temp);
return value;
}
char check_stack(node data) {
return data->alpha;
}
int isOperator(char c) {
return c == '/' || c == '*' || c == '-' || c == '+' || c == '^' ;
}