Evaluación de Postfix las expresiones que utilizan la pila [con el programa C]

Aprender: Cómo evaluar la expresión de sufijo utilizando pila en el programa de lenguaje C? En este artículo se explica la idea básica, el algoritmo (con el diagrama sistemático y tabla) y un programa para evaluar la expresión de sufijo utilizando pila.

Como se discutió en Infijo Para Postfix conversión que utilizan la pila, los hallazgos del compilador que sea conveniente para evaluar una expresión en su forma de sufijo. Las virtudes de forma postfix include eliminación de paréntesis que significan prioridad de la evaluación y la eliminación de la necesidad de observar las normas de jerarquía, precedencia y asociatividad durante la evaluación de la expresión.

Como expresión Postfix es sin paréntesis y se puede evaluar como dos operandos y un operador a la vez, esto hace más fácil para el compilador y el ordenador de manejar.

regla Evaluación de un sufijo estados de expresión:

  1. While leer la expresión de izquierda a derecha, empuje el elemento de la pila if es un operando.
  2. pop los dos operandos de la pila, if el elemento es un operador y luego evaluarla.
  3. Empuje hacia atrás el resultado de la evaluación. Repetir hasta el final de la expresión.

Algoritmo

1) Agregar ) a la expresión de sufijo.
2) Leer expresión de sufijo izquierda a derecha hasta ) encontrado se encuentra
3) If operando, la empujo en la pila
[Fin If] se encuentra
4) If operador, POP dos elementos
i ) a -> Top elemento
ii) B-> Junto al elemento superior
iii) Evaluar B operador Un
empujar B operador Un en la Pila
5) resultado Conjunto = pop
6) FIN

Veamos un ejemplo para entender mejor el algoritmo:

Expresión: 456 * +

Resultado: 34

Evaluación de Postfix Expresiones usando Pila


#include <stdio.h>
#include <ctype.h>
#define MAXSTACK 100
#define POSTFIXSIZE 100

int stack[MAXSTACK];
int top = -1;


void push(int item)
{
if (top >= MAXSTACK - 1) {
printf("stack over flow");
return;
}
else {
top = top + 1;
stack[top] = item;
}
}

int pop()
{
int item;
if (top < 0) {
printf("stack under flow");
}
else {
item = stack[top];
top = top - 1;
return item;
}
}

void EvalPostfix(char postfix[])
{
int i;
char ch;
int val;
int A, B;

for (i = 0; postfix[i] != ')'; i++) {
ch = postfix[i];
if (isdigit(ch)) {

push(ch - '0');
}
else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') {

A = pop();
B = pop();
switch (ch)
{
case '*':
val = B * A;
break;
case '/':
val = B / A;
break;
case '+':
val = B + A;
break;
case '-':
val = B - A;
break;
}

push(val);
}
}
printf(" n Result of expression evaluation : %d n", pop());
}
int main()
{
int i;

char postfix[POSTFIXSIZE];
printf("ASSUMPTION: There are only four operators(*, /, +, -) in an expression and operand is single digit only.n");
printf(" nEnter postfix expression,npress right parenthesis ')' for end expression : ");

for (i = 0; i <= POSTFIXSIZE - 1; i++) {
scanf("%c", &postfix[i]);
if (postfix[i] == ')')
{
break;
}
}

EvalPostfix(postfix);
return 0;
}

salida

First Run:
Enter postfix expression, press right parenthesis ')' for end expression : 456*+)
Result of expression evaluation : 34
Second Run:
Enter postfix expression, press right parenthesis ')' for end expression: 12345*+*+)
Result of expression evaluation: 47


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *