我想用c语言实现中缀式变成逆波兰式
时间: 2023-03-28 10:02:14 浏览: 104
好的,这个问题我可以回答。中缀式转换为逆波兰式需要用到栈的数据结构,具体实现可以参考以下步骤:
1. 创建一个栈,用于存储运算符。
2. 从左到右遍历中缀表达式的每个元素。
3. 如果当前元素是数字,则直接输出。
4. 如果当前元素是左括号,则将其压入栈中。
5. 如果当前元素是右括号,则将栈中的运算符依次弹出并输出,直到遇到左括号。
6. 如果当前元素是运算符,则将其与栈顶运算符比较,如果栈顶运算符优先级高于当前运算符,则将栈顶运算符弹出并输出,直到栈顶运算符优先级低于或等于当前运算符,然后将当前运算符压入栈中。
7. 遍历完中缀表达式后,将栈中剩余的运算符依次弹出并输出。
这样就可以将中缀表达式转换为逆波兰式了。
相关问题
用c语言写一个生成逆波兰式
以下是一个简单的生成逆波兰式的 C 语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100
char stack[MAX_STACK_SIZE][MAX_STACK_SIZE];
int top = -1;
void push(char* item)
{
if (top >= MAX_STACK_SIZE - 1) {
printf("Stack Overflow\n");
return;
}
top++;
strcpy(stack[top], item);
}
char* pop()
{
if (top == -1) {
printf("Stack Underflow\n");
return NULL;
}
char* item = stack[top];
top--;
return item;
}
int is_operator(char* symbol)
{
if (strcmp(symbol, "+") == 0 || strcmp(symbol, "-") == 0 || strcmp(symbol, "*") == 0 || strcmp(symbol, "/") == 0) {
return 1;
}
return 0;
}
int precedence(char* symbol)
{
if (strcmp(symbol, "*") == 0 || strcmp(symbol, "/") == 0) {
return 2;
}
else if (strcmp(symbol, "+") == 0 || strcmp(symbol, "-") == 0) {
return 1;
}
return 0;
}
void infix_to_postfix(char* infix_expression, char* postfix_expression)
{
int i = 0, j = 0;
char* symbol;
while (infix_expression[i] != '\0') {
symbol = (char*)malloc(MAX_STACK_SIZE * sizeof(char));
while (infix_expression[i] == ' ' || infix_expression[i] == '\t') {
i++;
}
symbol[0] = infix_expression[i];
if (isdigit(infix_expression[i])) {
j = i + 1;
while (isdigit(infix_expression[j])) {
j++;
}
strncpy(&symbol[1], &infix_expression[i + 1], j - i - 1);
symbol[j - i] = '\0';
strcat(postfix_expression, symbol);
strcat(postfix_expression, " ");
i = j;
}
else if (is_operator(symbol)) {
while (top != -1 && precedence(stack[top]) >= precedence(symbol)) {
strcat(postfix_expression, pop());
strcat(postfix_expression, " ");
}
push(symbol);
i++;
}
else if (symbol[0] == '(') {
push(symbol);
i++;
}
else if (symbol[0] == ')') {
while (top != -1 && stack[top][0] != '(') {
strcat(postfix_expression, pop());
strcat(postfix_expression, " ");
}
pop();
i++;
}
free(symbol);
}
while (top != -1) {
strcat(postfix_expression, pop());
strcat(postfix_expression, " ");
}
}
int main()
{
char infix_expression[MAX_STACK_SIZE], postfix_expression[MAX_STACK_SIZE];
printf("Enter Infix Expression : ");
gets(infix_expression);
infix_to_postfix(infix_expression, postfix_expression);
printf("Postfix Expression : %s", postfix_expression);
return 0;
}
```
该程序使用栈数据结构将中缀表达式转换为逆波兰式。输入中缀表达式后,程序将空格分隔的逆波兰式输出到屏幕上。
c语言实现中缀表达式转换为后缀表达式
好的,让我来回答您的问题。C语言实现中缀表达式转换为后缀表达式的方法是使用栈的数据结构。这个算法可以被称为“逆波兰式(Reverse Polish Notation)算法”。您可以在尝试编写这个算法的时候,遵循一些规则,如运算符的优先级、左括号的处理方式等等。如果您有需要,我可以为您提供更详细的讲解。
阅读全文