用c语言写一个代码实列实现中缀表达式转后缀
时间: 2024-01-29 17:02:20 浏览: 63
c语言实现中缀表达式向后缀表达式转换
5星 · 资源好评率100%
表达式的功能,你可以回答。
好的,关于中缀表达式转后缀表达式的问题,以下是一段用 C 语言实现的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSTACK 100 // 栈的最大容量
#define MAXEXPR 100 // 表达式的最大长度
char stack[MAXSTACK]; // 定义栈
int top = -1; // 栈顶指针初始化为-1
/* 判断是否是运算符 */
int isOperator(char ch)
{
if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '%') {
return 1;
}
return 0;
}
/* 获取运算符的优先级 */
int getPriority(char ch)
{
if (ch == '*' || ch == '/' || ch == '%') {
return 2;
}
else if (ch == '+' || ch == '-') {
return 1;
}
else {
return 0;
}
}
/* 将中缀表达式转换为后缀表达式 */
void infixToPostfix(char *infix, char *postfix)
{
int i, j;
char ch;
strcpy(postfix, ""); // 初始化后缀表达式为空字符串
for (i = 0; infix[i] != '\0'; i++) {
ch = infix[i];
if (ch == ' ' || ch == '\t') { // 忽略空格和制表符
continue;
}
else if (isdigit(ch) || isalpha(ch)) { // 如果是数字或字母,直接添加到后缀表达式中
postfix[strlen(postfix)] = ch;
}
else if (isOperator(ch)) { // 如果是运算符,则进行相应的处理
while (top >= 0 && stack[top] != '(' && getPriority(stack[top]) >= getPriority(ch)) {
postfix[strlen(postfix)] = stack[top]; // 弹出操作符并添加到后缀表达式中
top--;
}
top++;
stack[top] = ch; // 将当前操作符压入栈
}
else if (ch == '(') { // 如果是左括号,则压入栈
top++;
stack[top] = ch;
}
else if (ch == ')') { // 如果是右括号,则进行相应的处理
while (top >= 0 && stack[top] != '(') {
postfix[strlen(postfix)] = stack[top]; // 弹出操作符并添加到后缀表达式中
top--;
}
if (top >= 0 && stack[top] == '(') {
top--; // 弹出左括号
}
}
}
while (top >= 0) { // 将栈中剩余的操作符全部弹出并添加到后缀表达式中
postfix[strlen(postfix)] = stack[top];
top--;
}
}
int main()
{
char infix[MAXEXPR]; // 中缀表达式
char postfix[MAXEXPR]; // 后缀表达式
printf("请输入中缀表达式:");
scanf("%s", infix); // 从控制台读取中缀表达式
infixToPostfix(infix, postfix); // 调用函数将中缀表达式转换为后缀表达式
printf("后缀表达式为:%s\n", postfix); // 输出后缀表达式
return 0;
}
```
希望这段代码能对您有所帮助!
阅读全文