Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Pila [LiFo] -> Last in - First out
- * Con array ( array simula la pila )
- * debug en false para no mostrar proceso
- * borrar lineas if ( debug ) .... para quitarlos
- */
- package pila;
- public class Pila {
- private int vector[];
- private int tope;
- private int tamano;
- //Para que vean el "proceso" si quieren lo borran de los while, for y donde este.
- private boolean debug = true;
- public Pila( int tamano ){
- this.tamano = tamano;
- tope = 0;
- vector = new int[ this.tamano ];
- }
- public void insertar( int valor ){
- if ( tope < tamano ){
- int aux[] = new int[ tope ];
- int topeAux = 0;
- while( tope > 0 && ( vector[ tope - 1 ] > valor ) ){
- //Mientras sea mayor se inserta en aux
- aux[ topeAux ] = vector[ tope - 1 ];
- topeAux++;
- tope--;
- if ( debug ) procesar( aux, topeAux );
- }
- System.out.println( "\ninsertando!\n" );
- vector[ tope ] = valor; //se inserta
- tope++;
- imprimir();
- //Una vez colocado el numero, devolver de aux al vector.
- for( int i = topeAux - 1; i >= 0; i-- ){
- vector[ tope ] = aux[ i ];
- tope++;
- if ( debug ) procesar( aux, i );
- }
- }else{
- System.out.println( "No pudo insertarse: " + valor + ", [ Pila LLena ]");
- }
- }
- public void eliminar( int valor ){
- if ( tope == 0 ){
- System.out.println( "No pudo eliminarse: " + valor + ", [ Pila Vacia ]");
- }else{
- //ir sacando hasta encontrar el valor
- int aux[] = new int[ tope ];
- int topeAux = 0;
- while( tope > 0 && vector[ tope - 1 ] != valor ){
- //Mientras sea mayor se inserta en aux
- aux[ topeAux ] = vector[ tope - 1 ];
- topeAux++;
- tope--;
- if ( debug ) procesar( aux, topeAux );
- }
- if ( tope == 0 ){
- System.out.println( "No se encontro: " + valor );
- //devolviendo datos a la pila
- for( int i = topeAux - 1; i >= 0; i-- ){
- vector[ tope ] = aux [ i ];
- tope++;
- if ( debug ) procesar( aux, i );
- }
- }else{
- if ( debug ) procesar( aux, topeAux );
- System.out.println( "Elemento en posicion "
- + ( tope - 1 ) + ", eliminado valor " + valor + "!" );
- tope--;
- //devolviendo datos a la pila desde esa posicion
- for( int i = topeAux - 1; i >= 0; i-- ){
- vector[ tope ] = aux[ i ];
- tope++;
- if ( debug ) procesar( aux, i );
- }
- }
- }
- }
- public void modificar( int valor, int nuevoValor ){
- if ( tope == 0 ){
- System.out.println( "No pudo modificarse: " + valor +
- " por " + nuevoValor + ", [ Pila Vacia ]");
- }else{
- //ir sacando hasta encontrar el valor
- int aux[] = new int[ tope ];
- int topeAux = 0;
- while( tope > 0 && vector[ tope - 1 ] != valor ){
- //Mientras sea mayor se inserta en aux
- aux[ topeAux ] = vector[ tope - 1 ];
- topeAux++;
- tope--;
- if ( debug ) procesar( aux, topeAux );
- }
- if ( tope == 0 ){
- System.out.println( "No se encontro: " + valor +
- ", fallo en modificar" );
- //devolviendo datos a la pila
- for( int i = topeAux - 1; i >= 0; i-- ){
- vector[ tope ] = aux [ i ];
- tope++;
- if ( debug ) procesar( aux, i );
- }
- }else{
- //cambiando dato:
- vector[ tope - 1 ] = nuevoValor;
- if ( debug ) procesar( aux, topeAux );
- System.out.println( "Modificacion exitosa!" );
- //devolviendo datos a la pila desde esa posicion
- for( int i = topeAux - 1; i >= 0; i-- ){
- vector[ tope ] = aux[ i ];
- tope++;
- if ( debug ) procesar( aux, i );
- }
- }
- }
- }
- public void consultar( int posicion ){
- if ( posicion < 0 || posicion >= tope ){
- System.out.println( "Posicion " + posicion +
- " fuera de rango [ 0 .. " + tope + " ]" );
- }else{
- int aux[] = new int[ tope ];
- int topeAux = 0;
- while( tope > 0 && ( ( tope - 1 ) != posicion ) ){
- //Mientras sea mayor se inserta en aux
- aux[ topeAux ] = vector[ tope - 1 ];
- topeAux++;
- tope--;
- if ( debug ) procesar( aux, topeAux );
- }
- //Imprimiendo valor
- System.out.println( "El valor en posicion: " + posicion +
- " es: " + vector[ tope - 1 ] );
- //devolviendo datos a vector
- for( int i = topeAux - 1 ; i >= 0; i-- ){
- vector[ tope ] = aux[ i ];
- tope++;
- if ( debug ) procesar( aux, i );
- }
- }
- }
- public void imprimir( ){
- /* Se imprimi de atrás para adelante ( el primo que sale )
- Para imprimir al revés guardar en pila "aux" e imprimirlo en reversa
- */
- //Para que sea más bonito
- System.out.println( );
- for( int i = tope - 1; i >= 0; i-- ){
- System.out.println( " | " + vector[ i ] + " | " );
- }
- System.out.println( " - - " );
- System.out.println( "tope: " + tope + ", [ 0 .. " + tamano + " ]" );
- }
- //Solo de ejemplo para el debug, es para ver como es la cosa con monitos
- private void procesar( int[] aux, int topeAux ){
- System.out.println("\n-----------------------------------");
- System.out.println( "Pila Original:" );
- for( int i = tope - 1; i >= 0; i-- ){
- System.out.println( " | " + vector[ i ] + " | " );
- }
- System.out.println( " - - " );
- System.out.println( "tope: " + tope + ", [ 0 .. " + tamano + " ]" );
- System.out.println( "\nPila Aux:" );
- for( int i = topeAux - 1; i >= 0; i-- ){
- System.out.println( " | " + aux[ i ] + " | " );
- }
- System.out.println( " - - " );
- System.out.println( "topeAux: " + topeAux + ", [ 0 .. " + tope + " ]" );
- System.out.println("-----------------------------------\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement