jueves, 5 de enero de 2012

Implementacion de pila y cola.


Tal vez le interese leer sobre listas enlazadas

Según lo que he aprendido, las pilas y colas no son estructura de datos, mas bien son formas de acceder a la información contenida en una estructura de dato como puede ser una lista o vector, entre otras.

Definiciones: 

Una pila (stack en inglés) es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que permite almacenar y recuperar datos. (por wikipedia).


Operaciones de la pila: 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 (size).
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 (empty).


Una cola (también llamada fila) es una estructura de datos (no estoy deacuerdo), caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir.(por wikipedia)


Operaciones Básicas de una Cola
Crear: se crea la cola vacía.
Encolar (añadir, entrar, insertar): se añade un elemento a la cola. Se añade al final de esta.
Desencolar (sacar, salir, eliminar): se elimina el elemento frontal de la cola, es decir, el primer elemento que entró.
Frente (consultar, front): se devuelve el elemento frontal de la cola, es decir, el primer elemento que entró.
Vacía: devuelve cierto si la pila está vacía o falso en caso contrario (empty).

Tal vez tambien te interese esto: Implementacion de una lista simple enlazada.


Mas informacion: Pila, cola.


 

Codigo Pila:

//Autor: Rey Salcedo Padilla
import java.util.ArrayList;
public class Pila extends ArrayList{
 
 //se añade un elemento a la pila.(push)
 public void apilar(Object dato){
  if(dato != null){
   this.add(dato);
  }else{
   System.out.println("Introduzca un dato no nulo");
  }  
 }
 
 //se elimina el elemento frontal de la pila.(pop)
 public void desapilar(){
  if(size() > 0){
   this.remove(this.size()-1);
  }
 }
 
 //devuelve el elemento que esta en la cima de la pila. (top o peek)
 public Object cima(){
  Object datoAuxiliar = null;
  if(this.size() > 0){
   datoAuxiliar = this.get(this.size()-1);
  }
  return datoAuxiliar;  
 }
 
 //devuelve cierto si la pila está vacía o falso en caso contrario (empty).
 public boolean vacia(){
  return this.isEmpty();
 }
}





//Autor:Rey Salcedo Padilla
import java.util.ArrayList;
public class Cola extends ArrayList{
 
 //se añade un elemento a la cola. Se añade al final de esta.
 public void encolar(Object dato){
  if(dato != null){
   this.add(dato);
  }else{
   System.out.println("Introduzca un dato no nulo");
  }  
 }

 //se elimina el elemento frontal de la cola, es decir, el primer elemento que entró.
 public void desencolar(){
  if(this.size() > 0){
   this.remove(0);
  }
 }
 
 //se devuelve el elemento frontal de la cola, es decir, el primer elemento que entró.
 public Object frente(){
  Object datoAuxiliar = null;
  if(this.size() > 0){
   datoAuxiliar = this.get(0);
  }
  return datoAuxiliar;  
 }
 
 //devuelve cierto si la pila está vacía o falso en caso contrario (empty).
 public boolean vacia(){
  return this.isEmpty();
 }
}





//Autor:Rey Salcedo Padilla
public class Main{
 public static void main(String []args){
  
  System.out.println("------Pila------");
  Pila pila = new Pila();
  pila.apilar("A");
  pila.apilar("B");
  pila.apilar("C");
  pila.apilar("D");
  
  System.out.println("Esta vacia la pila?:" + pila.vacia());
  System.out.println("Tamaño de la pila:" + pila.size());
  
  System.out.println(pila.cima());
  pila.desapilar();
  System.out.println(pila.cima());
  pila.desapilar();
  System.out.println(pila.cima());
  pila.desapilar();
  System.out.println(pila.cima());
  pila.desapilar();
  
  System.out.println("Esta vacia la pila?:" + pila.vacia());
    
  System.out.println("------Cola------");
  Cola cola = new Cola();
  cola.encolar("A");
  cola.encolar("B");
  cola.encolar("C");
  cola.encolar("D");
  
  System.out.println("Esta vacia la cola?:" + cola.vacia());
  System.out.println("Tamaño de la cola:" + cola.size());
  
  System.out.println(cola.frente());
  cola.desencolar();
  System.out.println(cola.frente());
  cola.desencolar();
  System.out.println(cola.frente());
  cola.desencolar();
  System.out.println(cola.frente());
  cola.desencolar();
  
  System.out.println("Esta vacia la cola?:" + cola.vacia());
 }
}



13 comentarios:

  1. que sencillo lo hiciste, gracias

    ResponderEliminar
  2. el codigo cola pero con interfaz??

    ResponderEliminar
  3. Hola si te refieres a un Gui, con componentes como JList por ejemplo, se me ocurre asociar un DefaultListModel a la lista o cola respectectivamente teniendo en cuenta que las implemente como clases hijas de ArrayList.

    ResponderEliminar
  4. 1.- necesito que me ayuden por favor, una lista de 5 números 10, 12, 15, 20, 25, usando pila y cola extraer el numero del medio es decir, 15.

    2.- dada una cantidad de 10 números usar pilas y cola
    traspasar a una estructura para luego imprimirla.
    5,4,3,2,1,10,9,8,7,6

    ResponderEliminar
    Respuestas
    1. Hola xlaudia_18_1989, en el ejemplo que publico en este blog está prácticamente solucionado lo que pides, anímate e intenta, y si tienes dudas puntuales pregúntame, con gusto te ayudaré

      Eliminar
    2. pucha lo se pero tengo que estudiar y hacer eso, por eso pido ayuda

      Eliminar
  5. Gracias man!!! me ha servido un monton!!!

    ResponderEliminar
  6. Hola como puedo hacer el metodo insertar cola con datos aleatorios?

    ResponderEliminar
  7. me salvaste..me sirvio muchisimo, muchas gracias!!

    ResponderEliminar

Entrada destacada

Matriz de adyacencia para un grafo

"La matriz de adyacencia es una matriz cuadrada que se utiliza como una forma de representar relaciones binarias."; aunque pa...