解释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+

后缀表达式的求值

算法

从左到右扫描输入字符串。

对于每个输入符号:

  • 如果它是数字,则将其压入栈中。

  • 如果它是运算符,则从栈中弹出最上面的两个内容,并对其应用运算符。然后,将结果压入栈中。

  • 如果输入符号是‘\0’,则清空栈。

C语言后缀表达式求值程序

以下是C语言后缀表达式求值程序:

 在线演示

#include<stdio.h>
int top = -1, stack [100];
main ( ){
   char a[50], ch;
   int i,op1,op2,res,x;
   void push (int);
   int pop( );
   int eval (char, int, int);
   printf("enter a postfix expression:");
   gets (a);
   for(i=0; a[i]!='\0'; i++){
      ch = a[i];
      if (ch>='0' && ch<='9')
         push('0');
      else{
         op2 = pop ( );
         op1 = pop ( );
         res = eval (ch, op1, op2);
         push (res);
      }
   }
   x = pop ( );
   printf("evaluated value = %d", x);
   getch ( );
}
void push (int n){
   top++;
   stack [top] = n;
}
int pop ( ){
   int res ;
   res = stack [top];
   top--;
   return res;
}
int eval (char ch, int op1, int op2){
   switch (ch){
      case '+' : return (op1+op2);
      case '-' : return (op1-op2);
      case '*' : return (op1*op2);
      case '/' : return (op1/op2);
   }
}

输出

执行上述程序时,会产生以下结果:

Run 1:
enter a postfix expression:45+
evaluated value = 9
Run 2:
enter a postfix expression: 3 5 2 * +
evaluated value = 13

更新于:2024年6月20日

19K+ 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告