Estructuras de datos pilas, colas, listas y árboles
1. Pilas:
Concepto:
Las pilas son estructuras de datos que tienes dos operaciones básicas:
push(para insertar un elemento)
pop (para extraer un elemento).
Funcionamiento:
Sus característica fundamental es que al extraer se obtiene siempre el último
elemento que acaba de insertarse. Por esta razón también se conocen como
estructuras de datos LIFO (del inglés LastInFirstOut).Las operaciones que definen el
comportamiento de una pila o primitivas son las siguientes:
1* Crear pila. 2* Insertar elemento. 3* Retirar elemento. 4* Pila vacía. 5* Vaciar pila.
La definición junto con la implementación de éste tipo de estructura, es conveniente
realizarlas en una unidad de biblioteca, de este modo se mantiene el nivel de
abstracción de la estructura.
Unit Pilas;
Interface
type
tipo_dato = <dato a almacenar>;
tptr_nodo_pila = ^tnodo_pila
tnodo_pila = record
dato : tipo_dato;
enlace : tptr_nodo_pila;
end;
2. Interfazparapilas:
public interface Stack {
public void push(Object o)
throwsStackOverflowException;
public Object pop()
throwsEmptyStackException;
public Object top()
throwsEmptyStackException;
publicintsize();
publicbooleanisEmpty();
Aplicación:
Las pilas se utilizan en muchas aplicaciones que utilizamos con
frecuencia. Por ejemplo, la gestión de ventanas en Windows (cuando cerramos
una ventana siempre recuperamos la que teníamos detrás). Otro ejemplo es la
evaluación general de cualquier expresión matemática para evitar tener que
calcular el número de variables temporales que hacen falta. Por ejemplo:
3 + 4 * (8 – 2 * 5)
5
-2 -10
8 8 -2
4 4 4 -8
3 3 3 3 -5
Bibliografia:
http://www.iuma.ulpgc.es/users/jmiranda/docencia/programacion/Tema4_ne.pdf
http://www.it.uc3m.es/java/prog/units/pilas-colas/guides/index_es.html
http://www.it.uc3m.es/java/prog/units/pilas-colas/guides/1/guide_es.html
http://www.pearsonhighered.com/educator/academic/product/0,,0321322134,00%2ben-
USS_01DBC.html
http://ww0.java4.datastructures.net/
http://www.it.uc3m.es/java/prog/units/pilas-colas/slides/1-listas_es.pdf
http://www.it.uc3m.es/java/prog/units/pilas-colas/slides/1-sld-
pilas_es.pdfhttp://www.it.uc3m.es/java/prog/units/pilas-colas/slides/1-sld-pilas_es.pdf
http://www.it.uc3m.es/java/prog/units/pilas-colas/slides/1-sld-pilas_es.pdf
http://html.rincondelvago.com/pilas-y-colas.html
http://es.scribd.com/doc/60034542/3/INSTRUCCIONES-DE-MANEJO-DE-LA-PILA
3. Colas:
Una cola es una estructura de datos, 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 FirstOut), debido a que el primer elemento
en entrar será también el primero en salir.
Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación (entre
otros), dónde los objetos, personas o eventos son tomados como datos que se almacenan y se
guardan mediante colas para su posterior procesamiento. Este tipo de estructura de datos abstracta
se implementa en lenguajes orientados a objetos mediante clases, en forma de listas enlazadas.
publicvoid inserta(Elemento x){
Nodo Nuevo;
Nuevo =new Nodo(x, null);
if(NodoCabeza==null){
NodoCabeza= Nuevo;
}else{
NodoFinal.Siguiente= Nuevo;
}
NodoFinal= Nuevo;
}
publicElementocabeza()throwsIllegalArgumentException{
if(NodoCabeza==null){
thrownewIllegalArgumentException();
}else{
returnNodoCabeza.Info;
}
}
public Cola(){
// Devuelve una Cola vacía
NodoCabeza=null;
NodoFinal=null;
}
BIBLIOGRAFIA:
linkcode.wordpress.com/2008/06/05/colas-en-java/
4. Listas.
Concepto:
Un arreglo tipo lista se define como una variable que permite almacenar un conjunto de
datos del mismo tipo organizados en una sola columna y uno o mas renglones.
También reciben el nombre de vectores en álgebra, o arreglo unidimensional en
programación.
Funcionamiento:
Los procesos normales con una lista o con sus elementos, incluyen declarar toda la lista,
capturar sus elementos, desplegarlos, realizar operaciones con ellos, desplegarlos, etc.
Para declarar una lista se usa el siguiente formato;
tipodatonomlista[]= new tipodato[cant elementos];
SORPRESA, no existenenjava arreglos o listas tradicionales, lo que existe es un objeto,
por tanto se debera usar el operador new antes de empezar a procesar el arreglo, la
ventajas son:
a) estas listas pueden usar el metodolength,(ejemplo nomlista.length;) para conocer el
tamaño de la misma.
NOTA: no existenenjava arreglos o listas tradicionales, lo que existe es un objeto, por
tanto se debera usar el operador new antes de empezar a procesar el arreglo, la ventajas
son:
Pseudocodigo:
import java.io.*;
class prog20 {
public static void main(String[] args) {
intedad[]= new int[5]; intreng;
BufferedReaderteclado = new BufferedReader(new
InputStreamReader(System.in));
//ciclo de captura
for(reng=0; reng<=4; reng++)
5. { System.out.println("dame edad "+reng+":");
try { edad[reng]= Integer.parseInt(teclado.readLine());
}catch(IOExceptionvarerror){};
};
//ciclo de proceso
for(reng=0;reng<=4;reng++)
edad[reng]=edad[reng]*12;
//ciclo de despliegue
for(reng=0; reng<=4; reng++)
System.out.println(edad[reng]);
} // cierramain
} // cierra clase
DDF o Algoritmo:
intedades[]= new int[12];
floatsueldos[]=new float[5];
Stringmunicipios[]={“tijuana”,”tecate”,”ensenada”};
en este ulimo caso, observar que tambien pueden crearse listas ya con tamaño fijo e
inicializadas o cargadas
notas:
Recordar también que la primera posición o renglón en una lista es la posición o renglón
0 (cero).
Aplicación:
estaslistas pueden usar el metodolength,(ejemplo nomlista.length;) para conocer el tamaño de
la misma.
Bibliografia:
http://www.programacionfacil.com/java:arreglos_listas
6. Arboles:
Es una estructura de datos ampliamente usada que imita la forma de un árbol (un conjunto de
nodos conectados). Un nodo es la unidad sobre la que se construye el árbol y puede tener cero
o más nodos hijos conectados a él. Se dice que un nodo a es padre de un nodo b si existe un
enlace desde a hasta b (en ese caso, también decimos que b es hijo de a). Sólo puede haber un
único nodo sin padres, que llamaremos raíz. Un nodo que no tiene hijos se conoce como hoja.
Los demás nodos (tienen padre y uno o varios hijos) se les conoce como rama.
Definición:
Un árbol es un conjunto finito de 0 o mas nodos v1,v2,...,vn tales que:
1- existe un nodo el cual se distingue de los demás, al mismo lo vamos llamar raiz
2- los demás elementos del conjuntos quedan particionados en m>=0 conjuntos disjuntos
T1,T2,...,TN los cuales son arboles.
los elementos T1,T2,...,TN son llamados sub-arboles. Vemos aquí la naturaleza recursiva de la
estructura árbol, puesto que definimos árbol en termino de arboles.
-El grado interior del nodo raíz es nulo, esto quiere decir que noexisten ramificaciones de
entrada hacia el.
-Los nodos que tienen grado exterior=0 se dicen que son nodos hojas de un árbol.
-Se dice que un árbol esta en niveles, los cuales están determinadospor la longitud de la
trayectoria desde la raíz hacia dicho nodo.
-El peso de un árbol esta determinado por el número de nodos hojas
-La altura de un árbol es 1 mas el mayor nivel de nodos
-Un conjunto de arboles enraizados se dice que forman un bosque.
Fuentes:
http://www.acidxoft.0fees.net/arboles.htm
7.
8.
9. Metodos de búsqueda.
Búsqueda interna:
Trabaja con elementos almacenados en la memoria principal de la maquina.
Pueden estar en estructuras estáticas o dinámicas. Los más importantes son:
Secuencial:
Consiste en revisar elementos hasta encontrar el dato buscado,
o llegar al final de los datos disponibles.
Primero se trata sobre búsqueda secuencial en arreglos y luego
en listas enlazadas. En el primer caso, se debe distinguir entre
arreglos ordenados y desordenados.
Esta última consiste, básicamente, en recorrer el arreglo, lo que
ocurra primero. Normalmente cuando una función de búsqueda
concluye con éxito, interesa conocer en qué posición fue hallado
el elemento que se estaba buscando. Esta idea se puede
generalizar para todos los métodos de búsqueda.
A continuación se presenta el algoritmo de búsqueda secuencial
en arreglos desordenados.
Algoritmo 9. Secuencial_desordenado
Secuencial_desordenado (V,N,X)
{Este algoritmo busca secuencialmente el elemento X en un arreglo
unidimensional desordenado V, de N componentes}
{I es una variable de tipo entero}
Son dos los posibles resultados: la posición del elemento, o un mensaje
en caso de no encontrarse el elemento. Si hay 2 o más casillas con el
mismo valor, se encuentra la primera, pero es posible obtener todas las
casillas con el dato buscado
10. Binaria:
Consiste en dividir el intervalo de búsqueda en 2 partes, comparando
el elemento buscado con el que ocupa la posición central en el arreglo.
Para el caso de que no fueran iguales se redefinen los extremos del
intervalo, según el elemento central sea mayor o menor que el
elemento buscado, disminuyendo el espacio de búsqueda. El proceso
concluye cuando el elemento es encontrado, o cuando el intervalo de
búsqueda se anula, es vacio.
Este método funciona solo con arreglos desordenados.
Transformación de claves:
Permite aumentar la velocidad de búsqueda sin necesidad de
tener los elementos ordenados. Cuenta con la ventaja de que el tiempo de
búsqueda es independiente del numero de componentes del arreglo.
Supongamos que se tiene una colección de de datos, con uno de ellos
identificado por una clave. Es claro que resulta atractivo tener acceso a ellos
de manera directa; es decir, sin recorrer algunos datos antes de localizar al
buscado. El método por transformación de claves permite realizar justamente
esta actividad; es decir, localizar el dato en forma directa.