martes, 4 de octubre de 2011

PILAS

concepto
pila es una estructura de datos en la que la inserción y la extracción de elementos se realiza sólo por un extremo que se denomina cabeza. como consecuencia, los elementos de una pila serán eliminados en orden inverso al que se insertaron. es decir, el último elemento que se metió en la pila será el primero en salir de ella.

debido al orden en que se insertan y eliminan los elementos en una pila, también se le conoce como estructura lifo (last in, first out: último en entrar, primero en salir).
ejemplo grafico:

en resumen: una pila es una estructura de datos homogénea (elementos del mismo tipo), secuencial y de tamaño variable. sólo es
posible un modo de acceso a esta estructura: a través de la cabeza de la pila.

en donde se logran a través de funciones como:

*insertar
*mostrar
*extraer
*mostrar

Operaciones
Una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar, a las que en las implementaciones modernas de las pilas se suelen añadir más de uso habitual.
  • Crear: se crea la pila vacía.
  • Apilar: se añade un elemento a la pila.(push)
  • Desapilar: se elimina el elemento frontal de la pila.(pop)
  • Cima: devuelve el elemento que esta en la cima de la pila. (top o peek)
  • Vacía: devuelve cierto si la pila está vacía o falso en caso contrario.
tres programas de pilas
1) pila estatica
package estructuradedatos;
import java.util.Scanner;
/**
 *
 * @author EDDY
 */
public class pila_estatica {
    int pila[]=new int[10];
    int pilai[]=new int[10];
    public void agregar(int dato)
    {
        Scanner cap = new Scanner (System.in);
        Scanner cap1 = new Scanner (System.in);
        String resp;
        System.out.println("desea agregar datos?");
        resp=cap.nextLine();
        System.out.println("ingrese los datos");
        for(int t=0;t<10;t++)
        {
        if(resp.equalsIgnoreCase("si"))
            {       
                dato=cap1.nextInt();
        }
            pila[t]=dato;
            pilai[t]=pila[t];
        }
    }
    public void imprimir ()
    {
        for(int s=9;s>0;s--)
        {
            System.out.println("dato "+s+" "+ pila[s]);
        }
    }
    public static void main(String[] args) {
        pila_estatica p = new pila_estatica();
        int dato=0;
        p.agregar(dato);
        p.imprimir();
    }
}

2) pila estatica con menu

package estructuradedatos;
import java.util.Scanner;
/**
 *
 * @author EDDY
 */
public class pila_pushpop {
    int pila[]=new int[10];
    int tope;
    int x=-1;
    public void tamaño()
    {
        System.out.println("¿de que tamaño quieres que sea la pila?");
        System.out.println("ten en cuenta que el valor 0 es una pila de un elemento");
        Scanner cap = new Scanner (System.in);
        tope=cap.nextInt();
    }
    void push()
    {
        x++;
        if (x==tope){
            System.err.println("la pila esta llena");
        }
        else{
        System.out.println("¿que valor desea ingresar?");
        Scanner cap1=new Scanner(System.in);
        int dato=cap1.nextInt();
        pila[x]=dato;
        }
    }
    void pop()
    {
        if (x==-1){
            System.err.println("la pila esta vacia");
        }
        else{
            x--;
            System.err.println("dato borrado");
        }
    }
    public void imprimir ()
    {
        if (x==-1){
            System.err.println("la pila esta vacia");
        }
        else{
        for(int s=x;s>=0;s--)
        {
            System.out.println("dato "+s+" "+ pila[s]);
        }
        }
    }
    void vaciar(){
        x=-1;
        System.err.println("la pila esta vacia");
    }
    public static void main(String[] args) {
        pila_pushpop p = new pila_pushpop();
        int menu=0;
        p.tamaño();
        Scanner cap1= new Scanner (System.in);
        do{
            System.out.println("1.-ingresar un dato");
            System.out.println("2.-borrar un dato");
            System.out.println("3.-mostrar pila");
            System.out.println("4.-vaciar pila");
            System.out.println("5.-salir");
            menu=cap1.nextInt();
            switch (menu){
                case 1:
                    p.push();
                    break;
                case 2:
                    p.pop();
                    break;
                case 3:
                    p.imprimir();
                    break;
                case 4:
                    p.vaciar();
                    break;
                case 5:
                    System.out.println("adios");
                    break;
                default:
                    System.out.println("la opcion no es correcta");
                    break;
        }
    }
        while (menu!=5);
}
}

3) pila dinamica (editada de un programa de lista)

package estructuradedatos;
import java.util.*;
/**
 *
 * @author EDDY
 */
public class pilaDinamica {
    public static void main(String[] args) {
        Scanner leer = new Scanner(System.in);
        int num, op;
        LinkedList lista = new LinkedList();
        do{
            System.out.println("\t menu\t");
            System.out.println("operaciones con pilas");
            System.out.println("1.- insertar al final");
            System.out.println("2.- borrar al final");
            System.out.println("3.- mostrar pila");
            System.out.println("4.- borrar toda la pila");
            System.out.println("5.- salir");
            System.out.println("\n");
            System.out.println("elija la operacion que desee");
            op=leer.nextInt();
            switch (op){
                case 1:
                    System.out.println("inserte numero");
                    num = leer.nextInt();
                    lista.addLast(num);
                    break;
                case 2:
                    System.out.println("se borrara el noso final");
                    lista.removeLast();
                    break;
                case 3:
                    System.out.println("la lista es la siguiente");
                    List lista2 = new ArrayList(lista);
                    Iterator it = lista2.iterator();
                    while (it.hasNext()){
                        System.out.println(it.next());
                    }
                    break;
                case 4:
                    System.out.println("se borraran todos los elementos");
                    lista.clear();
                    break;
                case 5:
                    System.out.println("al rato");
                    break;
            }
        }
        while (op !=5);
    }
}



bibliografia
concepto
operaciones

No hay comentarios:

Publicar un comentario