Advertisement
cotolonco

Pilas [ Simuladas con arreglo ]

Sep 24th, 2014
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.33 KB | None | 0 0
  1. /*
  2.  * Pila [LiFo] -> Last in - First out
  3.  * Con array ( array simula la pila )
  4.  * debug en false para no mostrar proceso
  5.  * borrar lineas if ( debug ) .... para quitarlos
  6.  */
  7.  
  8. package pila;
  9.  
  10. public class Pila {
  11.  
  12.     private int vector[];
  13.     private int tope;
  14.     private int tamano;
  15.     //Para que vean el "proceso" si quieren lo borran de los while, for y donde este.
  16.     private boolean debug = true;
  17.    
  18.     public Pila( int tamano ){
  19.         this.tamano = tamano;
  20.         tope = 0;
  21.         vector = new int[ this.tamano ];
  22.     }
  23.    
  24.     public void insertar( int valor ){
  25.        
  26.         if ( tope < tamano ){
  27.              
  28.             int aux[] = new int[ tope ];
  29.             int topeAux = 0;
  30.  
  31.             while( tope > 0 && ( vector[ tope - 1 ] > valor ) ){
  32.                 //Mientras sea mayor se inserta en aux
  33.                 aux[ topeAux ] = vector[ tope - 1 ];
  34.                 topeAux++;
  35.                 tope--;
  36.                 if ( debug ) procesar( aux, topeAux );
  37.             }
  38.            
  39.             System.out.println( "\ninsertando!\n" );
  40.             vector[ tope ] = valor; //se inserta
  41.             tope++;
  42.             imprimir();
  43.             //Una vez colocado el numero, devolver de aux al vector.
  44.             for( int i = topeAux - 1; i >= 0; i-- ){
  45.                
  46.                 vector[ tope ] = aux[ i ];  
  47.                 tope++;
  48.                 if ( debug ) procesar( aux, i );
  49.             }
  50.                
  51.                    
  52.         }else{
  53.             System.out.println( "No pudo insertarse: " + valor + ", [ Pila LLena ]");
  54.         }
  55.        
  56.     }
  57.  
  58.     public void eliminar( int valor ){
  59.        
  60.         if ( tope == 0 ){
  61.            
  62.             System.out.println( "No pudo eliminarse: " + valor + ", [ Pila Vacia ]");
  63.        
  64.         }else{
  65.             //ir sacando hasta encontrar el valor
  66.             int aux[] = new int[ tope ];
  67.             int topeAux = 0;
  68.  
  69.             while( tope > 0 && vector[ tope - 1 ] != valor ){
  70.                 //Mientras sea mayor se inserta en aux
  71.                 aux[ topeAux ] = vector[ tope - 1 ];
  72.                 topeAux++;
  73.                 tope--;
  74.                 if ( debug ) procesar( aux, topeAux );
  75.             }
  76.            
  77.             if ( tope == 0 ){
  78.                 System.out.println( "No se encontro: " + valor );
  79.                 //devolviendo datos a la pila
  80.                 for( int i = topeAux - 1; i >= 0; i-- ){
  81.                     vector[ tope ] = aux [ i ];
  82.                     tope++;
  83.                     if ( debug ) procesar( aux, i );
  84.                 }
  85.             }else{
  86.                 if ( debug ) procesar( aux, topeAux );
  87.                 System.out.println( "Elemento en posicion "
  88.                 + ( tope - 1 ) + ", eliminado valor " + valor + "!" );
  89.                
  90.                 tope--;
  91.                 //devolviendo datos a la pila desde esa posicion
  92.                 for( int i  = topeAux - 1; i >= 0; i-- ){
  93.                     vector[ tope ] = aux[ i ];
  94.                     tope++;
  95.                     if ( debug ) procesar( aux, i  );
  96.                 }
  97.                
  98.             }
  99.            
  100.            
  101.         }
  102.     }
  103.    
  104.     public void modificar( int valor, int nuevoValor ){
  105.        
  106.         if ( tope == 0 ){
  107.            
  108.             System.out.println( "No pudo modificarse: " + valor  +
  109.                     " por " + nuevoValor + ", [ Pila Vacia ]");
  110.        
  111.         }else{
  112.             //ir sacando hasta encontrar el valor
  113.             int aux[] = new int[ tope ];
  114.             int topeAux = 0;
  115.  
  116.             while( tope > 0 && vector[ tope - 1 ] != valor ){
  117.                 //Mientras sea mayor se inserta en aux
  118.                 aux[ topeAux ] = vector[ tope - 1 ];
  119.                 topeAux++;
  120.                 tope--;
  121.                 if ( debug ) procesar( aux, topeAux );
  122.             }
  123.            
  124.             if ( tope == 0 ){
  125.                 System.out.println( "No se encontro: " + valor  +
  126.                         ", fallo en modificar" );
  127.                 //devolviendo datos a la pila
  128.                 for( int i = topeAux - 1; i >= 0; i-- ){
  129.                     vector[ tope ] = aux [ i ];
  130.                     tope++;
  131.                     if ( debug ) procesar( aux, i );
  132.                 }
  133.             }else{
  134.                 //cambiando dato:
  135.                 vector[ tope - 1 ] = nuevoValor;
  136.                 if ( debug ) procesar( aux, topeAux );
  137.                 System.out.println( "Modificacion exitosa!" );                
  138.                 //devolviendo datos a la pila desde esa posicion
  139.                 for( int i  = topeAux - 1; i >= 0; i-- ){
  140.                     vector[ tope ] = aux[ i ];
  141.                     tope++;
  142.                     if ( debug ) procesar( aux, i );
  143.                 }
  144.                
  145.             }
  146.            
  147.            
  148.         }
  149.        
  150.     }
  151.    
  152.     public void consultar( int posicion ){
  153.        
  154.         if ( posicion < 0 || posicion >= tope ){
  155.             System.out.println( "Posicion " + posicion +
  156.                     " fuera de rango [ 0 .. " + tope + " ]" );
  157.         }else{
  158.            
  159.             int aux[] = new int[ tope ];
  160.             int topeAux = 0;
  161.  
  162.             while( tope > 0 && ( ( tope - 1 ) != posicion ) ){
  163.                 //Mientras sea mayor se inserta en aux
  164.                 aux[ topeAux ] = vector[ tope - 1 ];
  165.                 topeAux++;
  166.                 tope--;
  167.                 if ( debug ) procesar( aux, topeAux );
  168.             }
  169.            
  170.             //Imprimiendo valor
  171.             System.out.println( "El valor en posicion: " + posicion +
  172.                     " es: " + vector[ tope - 1 ] );
  173.            
  174.             //devolviendo datos a vector
  175.             for( int i = topeAux - 1 ; i >= 0; i-- ){
  176.                 vector[ tope ] = aux[ i ];
  177.                 tope++;
  178.                 if ( debug ) procesar( aux, i );
  179.             }
  180.            
  181.            
  182.         }
  183.    
  184.     }
  185.    
  186.     public void imprimir( ){
  187.         /* Se imprimi de atrás para adelante ( el primo que sale )
  188.            Para imprimir al revés guardar en pila "aux" e imprimirlo en reversa
  189.         */
  190.        
  191.         //Para que sea más bonito
  192.         System.out.println( );
  193.         for( int i = tope - 1; i >= 0; i-- ){
  194.             System.out.println( " | " + vector[ i ] + " | " );
  195.         }
  196.         System.out.println( "  - - " );
  197.         System.out.println( "tope: " + tope + ", [ 0 .. " + tamano + " ]" );
  198.        
  199.     }
  200.    
  201.     //Solo de ejemplo para el debug, es para ver como es la cosa con monitos
  202.     private void procesar( int[] aux, int topeAux ){
  203.        
  204.         System.out.println("\n-----------------------------------");
  205.         System.out.println( "Pila Original:" );
  206.         for( int i = tope - 1; i >= 0; i-- ){
  207.             System.out.println( " | " + vector[ i ] + " | " );
  208.         }
  209.         System.out.println( "  - - " );
  210.         System.out.println( "tope: " + tope + ", [ 0 .. " + tamano + " ]" );
  211.      
  212.         System.out.println( "\nPila Aux:" );
  213.         for( int i = topeAux - 1; i >= 0; i-- ){
  214.             System.out.println( " | " + aux[ i ] + " | " );
  215.         }
  216.         System.out.println( "  - - " );
  217.         System.out.println( "topeAux: " + topeAux + ", [ 0 .. " + tope + " ]" );
  218.         System.out.println("-----------------------------------\n");
  219.     }
  220.    
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement