Link Log

Una manera de perder el tiempo…

Java Infijo a Posfijo

with 8 comments

Bueno, ya conociendo el algoritmo, se puede hacer en Java:

class converpostultima{	
 public static void main (String args[])
  {
   
    String expr = new String("");
    String exprpost = new String("");
    char ch;
    int max;
    System.out.print("Dame la Expresion en Infijo: ");
    expr =Leer.dato();
    max=expr.length();
    operapilaschar obj1 = new operapilaschar(max);
    System.out.println();
    System.out.println();
    System.out.println("La Expresion en Postfijo es :");
    obj1.push('('); // inserta '(' a la PILA
    expr+=')'; // inserta ')' al final de Q
    for (int i=0;i=precedencia(ch) && obj1.pila[obj1.tope]!='('))
 	  	   {
 	  	    obj1.pop();
 	  	    exprpost+=obj1.dret;
 	  	   } 
 	  	   obj1.push(ch);
                break;               
 	case ')': while (obj1.pila[obj1.tope] != '(')
 	          {
 	  	    obj1.pop();
 	  	    exprpost+=obj1.dret;
 	  	  }
 	  	   obj1.pop();
 	  	  break;       
 	  	  default : exprpost+=ch;
    } 	       	    	                     
 	  	  	 
  } 	 	   
  while (!(obj1.pila_Vacia(obj1.tope)))
    {
      obj1.pop();	        
      if (obj1.dret!= '(')
      exprpost+=obj1.dret;
    } 	 
  System.out.println(exprpost);     
} 	
 
 public static int precedencia(char ch)
 {
 	int aux = 0;
 	switch (ch)
 	 {
 	 	case '^' : aux = 4;
 	 	           break;
 	 	case '*' : case '/' : aux = 3;
 	 	           break;
 	 	case '+' : case '-' : aux = 2;
 	 	           break;
 	 	case '(' : aux = 1;
 	 	           break;
 	 }
 	 return aux;	
 }
}

Cabe aclarar que el código no lo hice yo, si no que me lo pasaron para entender el algoritmo.

Aquí esta la clase operapilaschar

class operapilaschar

  {

  	

    public static char dret;

 

    public static int max;

 	

    public static char pila[];

 

    public static int tope = -1;

 

    

    public operapilaschar()

      {

 	max=20;

 	pila=new char [max];

      }

 	

    public operapilaschar(int n)

      { 

 	 max=n-1;

 	 pila = new char [max];

      } 	 	

 

  	

 public static boolean pila_Llena(int tope,int max)

  {

  	 boolean llena;

  	 if (tope==max)

  	      llena=true;

  	    else

  	      llena=false;

  	 return llena;

  }	        

  

 public static boolean pila_Vacia(int tope)

  {

 	 boolean vacia;

 	 if (tope == -1)

 	    vacia=true;

 	   else

 	    vacia=false;

 	 return vacia;

  }



 public static void push(char dato)

 {

 	if(pila_Llena(tope,max))

 	  System.out.println("!Cuidado!, Desbordamiento!!!!!");

 	   else

 	     {

 	     	tope++;

 	     	pila[tope]=dato;// pone el nuevo dato en la pila

 	     }

 	 

 }	     	



public static void pop()

 {

 	if (pila_Vacia(tope))

 	   System.out.println("!Cuidado!, Subdesbordamiento!!!!!");

 	else {

 		  dret=pila[tope];

 	      tope--;

 	      }// actualiza tope y se elimina elemento en el tope

 	

 }

  	     

public static boolean compara(int dret,int ch)

 {

	if (dret=='(' && ch==')' || dret=='{' && ch=='}' || dret=='[' && ch==']')

	  return true;

	  else 

	  return false;

 }

 

 public static void estado()

  {

  	int i;

  	System.out.println(" El estado de la pila es : ");

  	System.out.println(" --------------------------");

  	for(i=0;i<=tope;i++)

  	 {

  	 	System.out.println("pila["+i+"] : "+pila[i]);

  	 }

  }
}

Written by Link X

April 29, 2008 at 11:48 pm

Posted in Java

Tagged with , , ,

8 Responses

Subscribe to comments with RSS.

  1. te falta la clase “operapilaschar”

    LP

    June 12, 2008 at 12:03 pm

  2. It doesnt compile

    Steve

    October 6, 2009 at 10:03 am

  3. ps si te da la estructura el opera pilas se te va a ser muy facil utiliza arboles

    arcadio

    March 19, 2010 at 8:46 am

  4. Ese algoritmo posee varios problemas con su estructura principalmente con las {}

    Santybago14

    June 15, 2010 at 6:10 pm

  5. no vale tu cosa andate a la v………………

    luis

    July 26, 2010 at 12:19 pm

  6. wow k pedo… faltan muchas cosas en el codigo… primero lee lo que pones no? y si no le endiendes mejor no publicks

    es535

    October 3, 2010 at 10:08 am

  7. pendejo

    dios padre

    March 12, 2012 at 10:57 pm

  8. Amigo, para evitar dudas no compartas cosas que no son tuyas, hay demasiadas cosas que no estan claras en tu codigo, no sirve de nada copiarlo si no se entiende que hace realmente.

    Azael

    June 17, 2013 at 11:56 pm


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: