讲解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 程序 -

#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("输入后缀表达式:");

   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:

输入后缀表达式:45+

evaluated value = 9

Run 2:

输入后缀表达式: 3 5 2 * +

evaluated value = 13

以上是 讲解C语言中栈表达式的求值 的全部内容, 来源链接: utcz.com/z/335587.html

回到顶部