解釋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+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.