解释 C 语言中栈表达式转换


是一种线性数据结构,其中数据仅在一个端点插入和删除。

算法

以下是 **Push ( )** 的算法:

  • 检查栈溢出。
if (top = = n-1)
printf("stack over flow");
  • 否则,将元素插入栈中。
top ++
a[top] = item

以下是 **Pop ( )** 的算法:

  • 检查栈下溢。
if (top = = -1)
printf("stack under flow");

否则,从栈中删除元素。

item = a[top]
top --

以下是 Display ( ) 的算法:

if (top == -1)
printf ("stack is empty");

否则,请遵循以下算法。

for (i=0; i<top; i++)
printf ("%d", a[i]);

栈的应用

让我们了解一下 C 语言 中栈表达式的转换。

**表达式** - 它是操作数和运算符的合法组合。

表达式的类型

C 语言中有三种 类型的表达式 可以进行转换和求值。它们在下面解释:

  • 中缀表达式 - 运算符位于操作数之间。例如,A+B

  • 前缀表达式 - 运算符位于操作数之前。例如,+AB

  • 后缀表达式 - 运算符位于操作数之后。例如,AB+

中缀表达式转换为后缀表达式和中缀表达式转换为前缀表达式的解释如下:

Infix to postfix    Infix to prefix
A+ B*C               A+ B*C
A+ BC *              A+ *BC
ABC* +               +A*BC

例如,

将 A+B*C / D-E+F 中缀表达式转换为后缀表达式和前缀表达式。

Infix to prefix            Infix to postfix
A +B*C / D-E+F            A +B*C / D-E+F
A +*BC / D-E+F            A +BC* / D-E+F
A + / *BCD -E+F           A +BC*D /-E+F
+A /*BCD -E +F            ABC *D /+ -E+F
-+A/*BCDE +F              ABC *D/ +E- +F
+ - +A/*BCDEF             ABC *D / +E –F+

算法

从左到右扫描输入字符串,并遵循以下步骤:

  • 步骤 1 - 如果输入符号是操作数,则将其打印到监视器上。

  • 步骤 2 - 如果输入符号是 '(',则将其压入栈中。

  • 步骤 3 - 如果输入符号是 ')',则弹出栈中的所有内容,直到遇到 '('。

  • 步骤 4 - 如果输入符号是运算符,则检查栈顶运算符与当前输入符号的优先级。

如果栈顶的优先级大于或等于当前符号的优先级,则弹出栈的内容并将当前符号压入栈中。

否则,将运算符压入栈中。

  • 步骤 5 - 如果输入符号是 '\0',则弹出栈中的内容,直到它变为空。

使用栈将中缀表达式转换为后缀表达式的过程如下所示:

更新时间: 2024-06-21

2K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.