Examen de ingreso de posgrado en informática: ¿Análisis de algoritmos de uso común para estructuras de datos (3)?

Capítulo 3

Por ejemplo: Exp=a*b+(c-d/e)*f

Si Exp=a*b+(c-d/e)*f, entonces es

p>

El tipo de prefijo es: +*ab*-c/def.

La fórmula del infijo es: a * b+c-d/e * f.

El sufijo es ab*cde/-fx+

Una comparación exhaustiva de sus relaciones puede sacar las siguientes conclusiones:

1. la tercera fórmula El orden relativo de los números es el mismo";

(Entre los tres órdenes de acceso de los árboles binarios, el orden de acceso relativo de las hojas es el mismo)

2. " Operaciones" en las tres expresiones El orden relativo entre símbolos es diferente";

3. Infix pierde información entre corchetes, lo que hace que el orden de las operaciones sea incierto;

(Las operaciones de prefijo y postfijo solo requieren una pila para almacenar los operandos, la evaluación infija requiere dos pilas, pila de símbolos y operación

Hacer una pila)

4. operandos. Los operadores delante de ellos y cerca de ellos forman una expresión mínima;

5. Las reglas de operación del tipo sufijo son:

& El orden en el que aparecen los operadores ampmiddot. la fórmula es exactamente El orden de operación de la expresión;

Cada operador de & ampmiddot y los dos operandos que aparecen antes y cerca de él forman una expresión mínima;

6. Reglas aritméticas para valores:

Si es un operando, se coloca directamente en la pila.

Si es un operador. Esto se compara con la parte superior actual de la pila. Si es más alto que la parte superior actual de la pila, colóquelo en la pila. Si es bajo, significa que la parte superior actual de la pila es la más alta y debe calcularse primero. Según el principio de compilación, la parte superior actual de la pila ya es la frase principal más a la izquierda)

De hecho, el proceso de evaluación directa de expresiones infijas y el proceso de convertir expresiones infijas en expresiones postfijas son sorprendentemente similares. , Excepto que la evaluación directa Evaluación es para encontrar y la conversión a sufijo es para salida.

Algoritmo de evaluación directa para expresiones infijas:

OPNDType EvalueExpression()

{//OPTR y OPND son la pila de operadores y la pila de operandos respectivamente.

pila de inicio(OPTR); Push(OPTR, ' # ');

pila de inicio(OPND); c = getchar(); c! ='#'|| GetTop(OPTR)! ='#')

{

If (!IN(c, OP)) //Si es el operando , Vaya directamente a la pila de operandos.

{ push(OPND, c);

c = getchar();

}

Else //Si es un operador, luego compárelo con la parte superior actual de la pila.

{

cambiar(precend(GetTop(OPTR), c))

{

Caso' & lt':push ( OPTR, c); //Más alto que la parte superior actual de la pila colocada en la pila.

c = getchar();

Break;

Case '= ':Pop(OPTR, x); //En la tabla de prioridades que diseñamos,

c = getchar(); //Solo "(" y ")" son iguales.

Break; //Solo hay '(' ')' en el medio de la especificación.

//Entonces podemos simplemente hacer estallar '('.

Case ">" // Si es más bajo que la parte superior actual de la pila, la parte superior de la pila debe ser calculado primero (especifique primero).

pop(OPTR, theta); //Extrae el operador superior de la pila

Pop(OPND, b); , que es el operando anterior.

Pop(OPND, a); //En la parte inferior (primero en entrar, último en salir de la pila)

Push(OPND, Operate(a, theta, b)); //Operación El resultado se coloca en la pila.

//(Es el operando de otros operadores)

Romper

}//Cambiar

}//De lo contrario <; /p>

}//whild

Return GetTop(OPND); //Lo último que queda en la pila de operandos es el resultado de la expresión completa.

}

Si tiene preguntas sobre el examen de ingreso de posgrado, no sabe cómo resumir el contenido del centro de examen de ingreso de posgrado o no conoce las políticas locales para inscripción al examen de ingreso de posgrado, haga clic en la parte inferior para consultar el sitio web oficial y obtener materiales de revisión gratuitos: /xl/