#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h>

#define MAX_SIZE 100

typedef struct { char data[MAX_SIZE]; int top; } Stack;

void stackInit(Stack *s) { s->top = -1; }

bool stackIsEmpty(Stack *s) { return s->top == -1; }

bool stackIsFull(Stack *s) { return s->top == MAX_SIZE - 1; }

void stackPush(Stack *s, char c) { if (stackIsFull(s)) { printf("Stack is full\n"); exit(1); } s->data[++s->top] = c; }

char stackPop(Stack *s) { if (stackIsEmpty(s)) { printf("Stack is empty\n"); exit(1); } return s->data[s->top--]; }

char stackPeek(Stack *s) { if (stackIsEmpty(s)) { printf("Stack is empty\n"); exit(1); } return s->data[s->top]; }

bool isOperator(char c) { return c == '+' || c == '-' || c == '*' || c == '/'; }

int getPrecedence(char c) { if (c == '+' || c == '-') { return 1; } else if (c == '*' || c == '/') { return 2; } return 0; }

void infixToPostfix(char *infix, char *postfix) { Stack stack; stackInit(&stack); int j = 0;

for (int i = 0; i < strlen(infix); i++) {
    char c = infix[i];
    if (isalpha(c)) {
        postfix[j++] = c;
    } else if (c == '(') {
        stackPush(&stack, c);
    } else if (c == ')') {
        while (!stackIsEmpty(&stack) && stackPeek(&stack) != '(') {
            postfix[j++] = stackPop(&stack);
        }
        if (!stackIsEmpty(&stack) && stackPeek(&stack) == '(') {
            stackPop(&stack);
        }
    } else if (isOperator(c)) {
        while (!stackIsEmpty(&stack) && stackPeek(&stack) != '(' && getPrecedence(c) <= getPrecedence(stackPeek(&stack))) {
            postfix[j++] = stackPop(&stack);
        }
        stackPush(&stack, c);
    }
}

while (!stackIsEmpty(&stack)) {
    postfix[j++] = stackPop(&stack);
}

postfix[j] = '\0';

}

int main() { char infix[MAX_SIZE]; char postfix[MAX_SIZE];

printf("Enter an infix expression: ");
scanf("%s", infix);

infixToPostfix(infix, postfix);

printf("Postfix expression: %s\n", postfix);

return 0;

}

C语言完成以下题目:假定运算符集合为 +、-、、、、利用栈将输入的中缀表达式转换成等价的后缀表达式并输出。输入格式输入一个字符串表示的中缀表达式以#结束其中每个操作数用一个小写字母表示。输出格式将对应的后缀表达式输出。输入样例a+b-ac+de-f+g#输出样例ab+acd+ef--g+

原文地址: https://www.cveoy.top/t/topic/jfdn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录