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