#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
);
infix[m] = ')';
converting( infix, postfix, &topPTR, check_stack, push_stack, pop, isOperator, precedence, precedence_power);
out_print(postfix);
return 0;
}
char out_print(char word[]) {
if( word[0] != '\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 {
}
}
int pop(node *fix) {
int value = (*fix)->alpha;
node temp = *fix;
*fix = (*fix)->nxtPTR;
return value;
}
char check_stack(node data) {
return data->alpha;
}
int isOperator(char c) {
return c == '/' || c == '*' || c == '-' || c == '+' || c == '^' ;
}
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)) {
int k = 0, j = 0, d = 0;
push(PTR, '(');
for (k = 0; checking_stack((node)PTR) != 0; k++) {
out[j++] = in[k];
}
if (in[k] == '(') {
push(PTR, in[k]);
}
if (isOper(in[k]) == 1) {
while (precedence_intro((*PTR)->alpha, in[k], intro_precedence_power) != -1) {
out[j++] = pop(PTR);
}
push(PTR, in[k]);
}
if (in[k] == ')') {
d = pop(PTR);
for (; d != '('; d = pop(PTR)) {
out[j++] = d;
}
}
}
}
int precedence(char data_1, char data_2, int(intro_precedence_power)(int res_1, int res_2)) {
char collection[] = "+1-1*2/2^3";
char buf_1
= (char)strcspn( collection
, &data_1
) + 1; char buf_2
= (char)strcspn(collection
, &data_2
) + 1;
return intro_precedence_power
(atoi(&collection
[buf_1
]), atoi(&collection
[buf_2
])); }
int precedence_power(int res_1, int res_2) {
if (res_1 < res_2) {
return -1;
}
else if (res_1 == res_2) {
return 0;
}
else if (res_1 > res_2) {
return 1;
}
return 0;
}
I2luY2x1ZGU8bWF0aC5oPgojaW5jbHVkZTxzdGRpby5oPgojaW5jbHVkZTxzdGRsaWIuaD4KI2luY2x1ZGU8c3RyaW5nLmg+CiNpbmNsdWRlPGN0eXBlLmg+CiNkZWZpbmUgIE1BWCAzMDAKCnN0cnVjdCBzdGFjayB7CgljaGFyIGFscGhhOwoJc3RydWN0IHN0YWNrICpueHRQVFI7Cgp9OwoKdHlwZWRlZiBzdHJ1Y3Qgc3RhY2sgIFN0YWNrOwp0eXBlZGVmICBTdGFjayAqbm9kZTsKdm9pZCAgbWVzc2FnZSh2b2lkKTsKY2hhciBvdXRfcHJpbnQoY2hhciB3b3JkW10pOwppbnQgcHJlY2VkZW5jZV9wb3dlcihpbnQgcmVzXzEsIGludCAgcmVzXzIpOwppbnQgcG9wKG5vZGUgKnRvcFB0cik7CnZvaWQgcHVzaF9zdGFjayhub2RlICp0b3BQVFIsIGNoYXIgdmFsdWUpOwppbnQgcG9wKG5vZGUgICp0b3BQVFIpOwpjaGFyIGNoZWNrX3N0YWNrKG5vZGUgZGF0YSk7CmludCBpc09wZXJhdG9yKGNoYXIgYyk7CmludCBwcmVjZWRlbmNlKGNoYXIgZGF0YV8xLCBjaGFyICAgZGF0YV8yLCBpbnQoaW50cm9fcHJlY2VkZW5jZV9wb3dlcikoaW50IHJlc18xLCBpbnQgIHJlc18yKSk7CnZvaWQgIGNvbnZlcnRpbmcoY2hhciAqaW4sIGNoYXIgKm91dCwgbm9kZSAqUFRSLCBjaGFyIChjaGVja2luZ19zdGFjaykobm9kZSksIHZvaWQgKHB1c2gpKG5vZGUgKnRvcFBUUiwgY2hhciB2YWx1ZSksIGludCAocG9wKShub2RlICpmaXgpLCBpbnQgKGlzT3BlcikoY2hhciBjKSwgaW50IChwcmVjZWRlbmNlX2ludHJvKShjaGFyIGRhdGFfMSwgY2hhciAgZGF0YV8yLCBpbnQoaW50cm9fcHJlY2VkZW5jZV9wb3dlcikoaW50IHJlc18xLCBpbnQgIHJlc18yKSksIGludChpbnRyb19wcmVjZWRlbmNlX3Bvd2VyKShpbnQgcmVzXzEsIGludCAgcmVzXzIpKTsKdm9pZCAgcGxlYXNlX2VudGVyKHZvaWQgKTsKCmludCBtYWluKHZvaWQpIHsKCQoJY2hhciBpbmZpeFtNQVhdOwoJY2hhciBwb3N0Zml4W01BWF07Cglub2RlIHRvcFBUUiA9IE5VTEw7CgkKCWZnZXRzKGluZml4LCBzaXplb2YoaW5maXgpLCBzdGRpbik7CiAgICBpbnQJbSA9IHN0cmxlbihpbmZpeCk7CgoJaW5maXhbbV0gPSAnKSc7CgoJbWVtc2V0KHBvc3RmaXgsIDAsIE1BWCk7CgkKCiAgCgoJY29udmVydGluZyggaW5maXgsIHBvc3RmaXgsICZ0b3BQVFIsIGNoZWNrX3N0YWNrLCBwdXNoX3N0YWNrLCBwb3AsIGlzT3BlcmF0b3IsIHByZWNlZGVuY2UsIHByZWNlZGVuY2VfcG93ZXIpOwoJb3V0X3ByaW50KHBvc3RmaXgpOwoJCglwdXRzKCIgIik7CgkKcmV0dXJuIDA7Cn0KCmNoYXIgb3V0X3ByaW50KGNoYXIgd29yZFtdKSB7CgppZiggd29yZFswXSAgIT0gJ1wwJyApewoJIAlwcmludGYoICIlYyAiICwgIHdvcmRbMF0gICAgKSA7IApyZXR1cm4gICAgb3V0X3ByaW50KHdvcmQgKyAxICApICA7Cn0KCn0KCnZvaWQgcHVzaF9zdGFjayhub2RlICp0b3BQVFIsIGNoYXIgdmFsdWUpIHsKCW5vZGUgbmV3UFRSID0gbWFsbG9jKHNpemVvZihTdGFjaykpOwoKCWlmIChuZXdQVFIgIT0gTlVMTCkgewoKCQluZXdQVFItPmFscGhhID0gdmFsdWU7CgkJbmV3UFRSLT5ueHRQVFIgPSAqdG9wUFRSOwoKCQkqdG9wUFRSID0gbmV3UFRSOwoJfQoKCWVsc2UgewoKCQlwdXRzKCJlcnJvciIpOwoKCX0KfQoKaW50IHBvcChub2RlICpmaXgpIHsKCmludCB2YWx1ZSA9ICgqZml4KS0+YWxwaGE7CgoJbm9kZSB0ZW1wID0gKmZpeDsKCSpmaXggPSAoKmZpeCktPm54dFBUUjsKCWZyZWUodGVtcCk7CgoJcmV0dXJuIHZhbHVlOwp9CgpjaGFyIGNoZWNrX3N0YWNrKG5vZGUgZGF0YSkgewoJcmV0dXJuIGRhdGEtPmFscGhhOwp9CgppbnQgaXNPcGVyYXRvcihjaGFyIGMpIHsKCXJldHVybiBjID09ICcvJyB8fCBjID09ICcqJyB8fCBjID09ICctJyB8fCBjID09ICcrJyAgfHwgYyA9PSAnXicgIDsKfQoKdm9pZCBjb252ZXJ0aW5nKGNoYXIgKmluLCBjaGFyICpvdXQsIG5vZGUgKlBUUiwgY2hhciAoY2hlY2tpbmdfc3RhY2spKG5vZGUpLCB2b2lkIChwdXNoKShub2RlICp0b3BQVFIsIGNoYXIgdmFsdWUpLCBpbnQgKHBvcCkobm9kZSAqZml4KSwgaW50IChpc09wZXIpKGNoYXIgYyksIGludCAocHJlY2VkZW5jZV9pbnRybykoY2hhciBkYXRhXzEsIGNoYXIgIGRhdGFfMiwgaW50KGludHJvX3ByZWNlZGVuY2VfcG93ZXIpKGludCByZXNfMSwgaW50ICByZXNfMikpLCBpbnQoaW50cm9fcHJlY2VkZW5jZV9wb3dlcikoaW50IHJlc18xLCBpbnQgIHJlc18yKSkgewoKCWludCBrID0gMCwgaiA9IDAsIGQgPSAwOwoJCglwdXNoKFBUUiwgJygnKTsKCQoJZm9yIChrID0gMDsgY2hlY2tpbmdfc3RhY2soKG5vZGUpUFRSKSAhPSAwOyBrKyspIHsKCQoJCWlmIChpc2RpZ2l0KGluW2tdKSkgewoJCQkKCQkJb3V0W2orK10gPSBpbltrXTsKCgkJfQoKCQlpZiAoaW5ba10gPT0gJygnKSB7CgoJCQlwdXNoKFBUUiwgaW5ba10pOwoKCQl9CgoJCWlmIChpc09wZXIoaW5ba10pID09IDEpIHsKCgkJCXdoaWxlIChwcmVjZWRlbmNlX2ludHJvKCgqUFRSKS0+YWxwaGEsIGluW2tdLCBpbnRyb19wcmVjZWRlbmNlX3Bvd2VyKSAhPSAtMSkgewoKCQkJCW91dFtqKytdID0gcG9wKFBUUik7CgkJCX0KCgkJCXB1c2goUFRSLCBpbltrXSk7CgkJfQoJCQoJCWlmIChpbltrXSA9PSAnKScpIHsKCgkJCWQgPSBwb3AoUFRSKTsKCQkJZm9yICg7IGQgIT0gJygnOyBkID0gcG9wKFBUUikpIHsKCQkJCW91dFtqKytdID0gZDsKCQkJfQoJCX0KCX0KfQoKCgoKCmludCBwcmVjZWRlbmNlKGNoYXIgZGF0YV8xLCBjaGFyICAgZGF0YV8yLCBpbnQoaW50cm9fcHJlY2VkZW5jZV9wb3dlcikoaW50IHJlc18xLCBpbnQgIHJlc18yKSkgIHsKIGNoYXIgY29sbGVjdGlvbltdID0gIisxLTEqMi8yXjMiOwkKIAogY2hhcglidWZfMSA9IChjaGFyKXN0cmNzcG4oICBjb2xsZWN0aW9uICwgJmRhdGFfMSkgKyAxOwogY2hhcglidWZfMiA9IChjaGFyKXN0cmNzcG4oY29sbGVjdGlvbiwgJmRhdGFfMikgKyAxOwoKCXJldHVybiAgIGludHJvX3ByZWNlZGVuY2VfcG93ZXIoYXRvaSgmY29sbGVjdGlvbltidWZfMV0pLCBhdG9pKCZjb2xsZWN0aW9uW2J1Zl8yXSkpOwp9CgppbnQgcHJlY2VkZW5jZV9wb3dlcihpbnQgcmVzXzEsIGludCAgcmVzXzIpIHsKCWlmIChyZXNfMSA8IHJlc18yKSB7CgkJcmV0dXJuICAgLTE7Cgl9CgllbHNlCWlmIChyZXNfMSA9PSByZXNfMikgewoJCXJldHVybiAJICAwOwoJfQoJZWxzZQlpZiAocmVzXzEgPiByZXNfMikgewoJCXJldHVybgkgIDE7Cgl9CglyZXR1cm4gMDsKfQ==