解释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
广告