Estructuras de datos | Varios | Pregunta 4

La mejor estructura de datos para verificar si una expresión aritmética tiene paréntesis balanceados es a (GATE CS 2004)

(A) cola
(B) pila
(C) árbol
(D) lista

Respuesta: (B)
Explicación: Hay tres tipos de paréntesis [ ] { }(). A continuación se muestra un segmento de código arbitrario c que tiene paréntesis de los tres tipos.

void func(int c, int a[])
{
   return  ((c +2)  + arr[(c-2)]) ; 
}

Stack es una opción sencilla para comprobar si los paréntesis izquierdo y derecho están equilibrados. Aquí hay un algoritmo para hacer lo mismo.

/*Return 1 if expression has balanced parentheses */
bool areParenthesesBalanced(expression )
{ 
   for each character in expression
   {
      if(character == ’(’ || character == ’{’ || character == ’[’) 
        push(stack, character);
      if(character == ’)’ || character == ’}’ || character == ’]’) 
      {
         if(isEmpty(stack))  
           return 0; /*We are seeing a right parenthesis  
                       without a left pair*/
  
         /* Pop the top element from stack, if it is not a pair
             bracket of character then there is a mismatch. 
             This will happen for expressions like {(}) */
         else if (! isMatchingPair(pop(stack), character) ) 
           return 0;   
      }
   }
    
   if(isEmpty(stack))
     return 1; /*balanced*/
   else  
     return 0;  /*not balanced*/   
} /* End of function to check parentheses */
  
/* Returns 1 if character1 and character2 are matching left
   and right parentheses */
bool isMatchingPair(character1, character2)
{
   if(character1 == ‘(‘ && character2 == ‘)’)
     return 1;
   else If(character1 == ‘{‘ && character2 == ‘}’)
     return 1;
   else If(character1 == ‘[‘ && character2 == ‘]’)
     return 1;
   else 
     return 0;
}

Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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