SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
EstucturasEstucturas de Datosde Datos PPááginagina 11
Unidad III
Tema 6: Pilas, Colas y Listas
Profesor: Jorge Escalona / Tobías Bolívar
Email: escaljorge@gmail.com / tobiasbolivar@gmail.com
Página Web: http://estructuradatos.tripod.com
EstucturasEstucturas de Datosde Datos PPááginagina 22
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
• Pilas
• Colas
• DiColas
• Listas Enlazadas
– Listas Simplemente Enlazadas
– Listas Doblemente Enlazadas
Contenido: 1
2
3
4
n
frente final
Roma Caracas Paris
cabecera
EstucturasEstucturas de Datosde Datos PPááginagina 33
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Pilas
• Una Pila es un contenedor de objetos que son insertados y removidos de
acuerdo al principio Last-In First-Out (LIFO).
• Operaciones básicas:
Inserta el objeto elem en la cima de la pila.
Entrada:Object; Salida: Ninguna
Remueve y retorna el objeto de la cima de la pila. Un error ocurre si
la pila está vacía.
Entrada: Object; Salida: Object.
Retorna el número de objetos en la pila.
Entrada: Ninguna; Salida: Entero;
Retorna un valor booleano inicando si la pila está vacía.
Entrada: Ninguna: Salida: Boolean
Retorna el objeto de la cima de la pila, sin removerlo;
Entrada: Ninguna; Salida: Object
Agregar(elem):
Remover(elem):
Longitud():
PilaVacia():
Cima()
EstucturasEstucturas de Datosde Datos PPááginagina 44
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Pilas - Implementación con un Arreglo
Algoritmo Longitud():
return cima + 1.
Algoritmo PilaVacia():
return (cima<0).
Algoritmo Cima():
if PilaVacia() then
Generar ErrorPilaVacia
return Elementos[cima].
Algoritmo Agregar(elem):
if Longitud() = Max then
generar ErrorPilaLlena
cima ← cima + 1
Elementos[cima] ← elem.
Algoritmo Remover():
if PilaVacia() then
generar ErrorPilaVacia
elem -> elementos[cima]
elementos[cima] ← null
cima ← cima - 1
return elem.
EstucturasEstucturas de Datosde Datos PPááginagina 55
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Colas
• Una Cola es un contenedor de objetos que son insertados y removidos de
acuerdo al principio FIFO (First-in First-Out).
• Operaciones básicas:
Inserta el objeto elem al final de la cola.
Entrada:Object; Salida: Ninguna
Remueve y retorna el objeto del frente de la cola. Un error ocurre si
la cola está vacía.
Entrada: Object; Salida: Object.
Retorna el número de objetos en la cola.
Entrada: Ninguna; Salida: Entero;
Retorna un valor booleano inicando si la cola está vacía.
Entrada: Ninguna: Salida: Boolean
Retorna el objeto del frente de la cola, sin removerlo;
Entrada: Ninguna; Salida: Object
Agregar(elem):
Remover(elem):
Longitud():
ColaVacia():
Frente()
EstucturasEstucturas de Datosde Datos PPááginagina 66
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Colas - Implementaciones con Arreglos Lineales
•Se utilizan dos índices para manipular la cola: frente (elemento al inicio) y final (elemento en
el final).
•Para agregar un elemento, se incrementa el índice final, considerando que la cola no esté
llena (final = max).
1 2 3 4 .... n
D S A
frente final
1 2 3 4 .... n
D S A P
frente final
A) Cola Original. B) Cola resultante después de insertar el
elemento ‘P’.
EstucturasEstucturas de Datosde Datos PPááginagina 77
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Colas - Implementaciones con Arreglos Lineales
•Para remover un elemento, se tienen dos opciones:
•Se incrementa el índice frente para apuntar al siguiente elemento. La desventaja
de esta opción es que se puede subutilizar el espacio del arreglo.
•Se mantiene el índice frente siempre en la primera posición del arreglo y se
mueven los elementos en la cola una posición. La desventaja de esta opción es el
costo de desplazar los elementos para una cola medianamente grande.
1 2 3 4 .... n
D S A P
frente final
A) Cola Original. B) Cola resultante después de eliminar un
elemento.
1 2 3 4 .... n
D S A P
frente final
A) Cola Original.
1 2 3 4 .... n
S A P
frente final
B) Cola resultante después de eliminar un
elemento.
1 2 3 4 .... n
S A P
frente final
EstucturasEstucturas de Datosde Datos PPááginagina 88
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Colas - Implementaciones con Arreglos Circulares
• Se puede seguir agregando elementos a la cola aún si el índice frente apunta al último
elemento del arreglo, insertándolo en la primera posición si no está ocupada.
• Para agregar un elemento se mueve el índice final hacia delante una posición según la
siguiente fórmula: final ← (final + 1) mod N
• Para eliminar un elemento se mueve el índice frente hacia delante una posición según la
siguiente fórmula: frente ← (frente + 1) mod N
1
2
3
4
n
frente final
1
2
3
4
n
frente
final
1
2
3
4
n
frente
final
EstucturasEstucturas de Datosde Datos PPááginagina 99
Colas - Implementaciones con Arreglos Circulares
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
• Inicialmente, tanto el índice frente como final, apuntan al primer elemento del arreglo. De
aquí, se establece la condición de cola vacía si frente = final. (figura a)
• El índice final, siempre apunta a una posición vacía del arreglo, la siguiente al último
elemento de la cola. (figura b)
• Para evitar que después de insertar n elementos sin desencolar ninguno, final vuelva a
apuntar a frente, lo cual haría coincidir las condiciones de pila vacia con la de pila llena, se
sacrifica una posición del arreglo, de tal forma que la condición de pila llena se presenta
cuando siguiente(final) = frente. (figura c)
1
2
3
4
n
frente final
1
2
3
4
n
frente
final
DG
X
n-1 n-1
1
2
3
4
n
DG
X
n-1
frente
L
K
.
.
.
. . .
.
.
.
(Figura a) (Figura b) (Figura c)
final
EstucturasEstucturas de Datosde Datos PPááginagina 1010
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Colas - Implementación con Arreglos Circulares
Algoritmo Longitud():
return
(Max-frente+final) mod Max.
Algoritmo ColaVacia():
return (frente = final).
Algoritmo Frente():
if ColaVacia() then
Generar ErrorColaVacia
return Elementos[frente].
Algoritmo Encolar(elem):
if Longitud() = Max - 1 then
generar ErrorColaLlena
Elementos[final] ← elem
final ← (final + 1) mod Max.
Algoritmo Desencolar():
if ColaVacia() then
generar ErrorColaVacia
elem -> elementos[frente]
elementos[frente] ← null
frente ← (frente + 1) mod Max
return elem.
Nota: Las fórmulas para el cálculo de
frente y final son válidas si la numeración
del arreglo comienza en cero. Para
arreglos cuya numeración comience en 1,
hay que sumarles 1 al resultado de la
fórmula.
EstucturasEstucturas de Datosde Datos PPááginagina 1111
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
DiColas
• Una DiCola es un contenedor de objetos que pueden ser insertados y
removidos tanto como por el inicio como por el final.
• Operaciones básicas:
Inserta el objeto elem al inicio de la cola.
Entrada:Object; Salida: Ninguna
Inserta el objeto elem al final de la cola.
Entrada:Object; Salida: Ninguna
Remueve y retorna el objeto del frente de la cola.
Entrada: Object; Salida: Object.
Remueve y retorna el objeto del final de la cola.
Entrada: Object; Salida: Object.
Retorna el número de objetos en la cola.
Entrada: Ninguna; Salida: Entero;
Retorna un valor booleano inicando si la cola está vacía.
Entrada: Ninguna: Salida: Boolean
Retorna el objeto del frente de la cola, sin removerlo;
Entrada: Ninguna; Salida: Object
Retorna el objeto del final de la cola, sin removerlo;
Entrada: Ninguna; Salida: Object
AgregarInicio(elem):
AgregarFinal(elem):
RemoverInicio(elem):
RemoverFinal(elem):
Longitud( ):
DiColaVacia( ):
Frente( ):
Final( ):
EstucturasEstucturas de Datosde Datos PPááginagina 1212
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Implementando Pilas y Colas con DiColas
Métodos de Pila
Longitud()
PilaVacia()
Cima()
Agregar(elem)
Remover()
Métodos de DiCola
Longitud()
DiColaVacia()
Final()
AgregarFinal(elem)
RemoverFinal()
Métodos de Cola
Longitud()
ColaVacia()
Frente()
Agregar(elem)
Remover()
Métodos de DiCola
Longitud()
DiColaVacia()
Frente()
AgregarFinal(elem)
RemoverFrente()
• Implementando
una Pila con una
DiCola
• Implementando
una Cola con una
DiCola
EstucturasEstucturas de Datosde Datos PPááginagina 1313
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Implementando Pilas y Colas con DiColas
• Usando una DiCola para implementar una Pila o una Cola, es un ejemplo de
un adaptador de plantilla. Un adaptador de plantilla, implementa una clase
utilizando métodos de alguna otra clase.
• En general, un adaptador de una clase especializa una clase más general.
• Se puede aplicar de dos formas:
• Especializar una clase más general modificando algunos métodos.
Ejemplo: Implementar una Pila con una DiCola.
• Especializar los tipos de objetos usados por una clase más general.
Ejemplo: Definir una clase PilaEnteros que la clase Pilas para sólo
almacenar números enteros.
EstucturasEstucturas de Datosde Datos PPááginagina 1414
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Listas Enlazadas
• Una lista enlazada es un tipo general de una estructura de dato utilizada
para almacenar una colección de elementos sin un tamaño predefinido.
• Alternativa para representar estructuras de datos lineales donde no se conoce
de antemano la cantidad de elementos a almacenar.
• La forma más simple de una lista enlazada es una lista simplemente
enlazada, la cual consiste de una colección de nodos que juntos forman una
colección lineal.
Nueva York Roma Caracas
cabecera
sig sig sig sig
elemento elemento elemento elemento
Paris
EstucturasEstucturas de Datosde Datos PPááginagina 1515
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Listas Simplemente Enlazadas
• En una lista simplemente enlazada, cada nodo es un objeto compuesto que
guarda una referencia a un elemento y una referencia, llamada siguiente
(next), a otro nodo.
• El primer y último nodo de una lista enlazada usualmente son llamados el
nodo cabecera (head) y el nodo cola (tail), respectivamente.
• Se identifica la cola como el nodo que tiene en siguiente una referencia null,
lo cual indica el fin de la lista.
• El enlace al siguiente elemento nos permite alcanzar cualquier nodo de la
lista comenzando desde el nodo cabecera. A esta operación se le llama
recorrer la lista.
Nueva York Roma Caracas
cabecera
sig sig sig sig
elemento elemento elemento elemento
Paris
EstucturasEstucturas de Datosde Datos PPááginagina 1616
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Implementación de Listas Simplemente Enlazadas
• Para implementar una lista simplemente enlazada se definen dos clases:
• La clase Nodo, la cual especifica el formato de los objetos asociados con
los nodos de la lista;
• La clase ListaEnlazada, la cual mantiene una referencia al nodo
cabecera de la lista y, adicionalmente, cualquier otra información que
pueda facilitar la manipulación de la lista. Como por ejemplo, una
referencia al nodo cola, o el número de elementos que existen en la lista.
EstucturasEstucturas de Datosde Datos PPááginagina 1717
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Inserción y Eliminación en la cabecera de la lista.
Nueva York Roma Caracas Paris
Nueva York Roma Caracas Paris
cabecera
cabecera
Roma Caracas Paris
cabecera
EstucturasEstucturas de Datosde Datos PPááginagina 1818
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Implementando una Pila con una Lista Simplemente Enlazada
• La implementación del TAD Pila utilizando una Lista Simplemente Enlazada
es bastante sencilla.
• Se utiliza la cabecera como la cima de la pila ya que la operación de
eliminación es más facil por este extremo de la lista que por la cola.
• Para facilidad y rapidez en ejecución de los métodos del TAD Pila, se
mantiene un contador del número de elementos actuales de la lista.
• La implementación de una pila sobre una lista simplemente enlazada tiene
una importante ventaja sobre la implementación basada en un arreglo, ya que
no requiere que se defina explícitamente un límite superior al tamaño de la
pila, por lo cual es libre de crecer o decrecer arbitrariamente.
Roma Caracas Paris
cabecera (cima)
EstucturasEstucturas de Datosde Datos PPááginagina 1919
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Implementando una Cola con una Lista Simplemente Enlazada
• Al igual que para el TAD Pila, la implementación del TAD Cola utilizando una
Lista Simplemente Enlazada es bastante sencilla.
• Se utiliza la cabecera como el frente de la cola y el último nodo (nodo cola)
como el final de la cola. Por qué no lo contrario?
• Para facilidad y rapidez en ejecución de los métodos del TAD Cola, se
mantiene un contador del número de elementos actuales de la lista.
• A pesar de que la implementación de una cola sobre una lista simplemente
enlazada presenta las mismas ventajas que una pila sobre un arreglo, la
implementación de los métodos es un poco más complicada.
Roma Caracas Paris
cabecera (frente) final
EstucturasEstucturas de Datosde Datos PPááginagina 2020
Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales
Implementando una DiCola con una Lista Doblemente Enlazada
• Remover un elemento en el final de una lista simplemente enlazada no puede ser
realizado en tiempo lineal.
• Para evitar este problema, la implementación de una DiCola se basa en una lista
doblemente enlazada.
• Cada uno de los nodos de la lista doblemente enlazada tiene un enlace siguiente
(elemento siguiente) y un enlace previo (elemento anterior).
• Se utilizan nodos especiales de cabecera (header) y remolque (trailer).
• El nodo cabecera va antes del primer elemento de la lista. Tiene un enlace
siguiente válido, pero un enlace previo nulo.
• El nodo remolque va después del último elemento de la lista. Tiene un enlace
previo válido, pero un enlace siguiente nulo.
• Los nodos cabecera y remolque son sólo nodos sentinelas; ellos no guardan ningún
elemento.
Roma Caracas Paris
cabecera remolque
EstucturasEstucturas de Datosde Datos PPááginagina 2121
Unidad III: El JavaUnidad III: El Java CollectionsCollections Framework (JFC)Framework (JFC)
• El Java Collections Framework (JFC) es una arquitectura unificada para
representar y manipular colecciones. Contiene los siguientes
elementos:
– Interfaces: Tipos abstractos de datos que representan las colecciones.
Permiten manipularlas con independencia de los detalles de su
implementación.
– Implementaciones: clases que implementan las interfaces anteriores.
– Algoritmos: Métodos que realizan de forma eficiente tareas habituales,
como búsquedas y ordenaciones, sobre objetos que implementan las
interfaces de la estructura de colecciones.
EstucturasEstucturas de Datosde Datos PPááginagina 2222
Unidad III: El JavaUnidad III: El Java CollectionsCollections Framework (JFC)Framework (JFC)
• Las interfaces del JFC encapsulan diferentes tipos de colecciones las
cuales permiten que sean manipuladas independientemente de su
implementación.
• Todas las interfaces son definidas de forma genérica. Por ejemplo, la
declaración de la interfaz Collection está definida de la siguiente
manera:
public interface Collection<E>...
Interfaces:
EstucturasEstucturas de Datosde Datos PPááginagina 2323
Unidad III: El JavaUnidad III: El Java CollectionsCollections Framework (JFC)Framework (JFC)
• Collection: Es la raíz de la jerarquía de las colecciones. Representa un grupo
de objetos conocidos como sus elementos.
• Set: Una colección que no permite elementos duplicados. Esta interfaz modela
la definición de conjuntos matemáticos.
• List: Una colección o secuencia ordenada. Permite elementos duplicados.
• Queue: Una colección usada para almacenar múltiples elementos con
prioridad para su procesamiento.
• Map: Un objeto que mapea claves con valores. Un objeto Map no puede
contener claves duplicadas.
• SortedSet: Un conjunto que mantiene sus elementos en orden ascendente.
• SortedMap: Un objeto Map que mantiene sus valores mapeados en orden
ascendente según la clave de cada mapeo.
Interfaces:
EstucturasEstucturas de Datosde Datos PPááginagina 2424
Unidad III: El JavaUnidad III: El Java CollectionsCollections Framework (JFC)Framework (JFC)
• Son las clases que implementan las interfaces del JFC.
Manejan los datos contenidos en las colecciones.
Implementaciones:
EstucturasEstucturas de Datosde Datos PPááginagina 2525
Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics))
public class Box {
private Object object;
public void add(Object object) {
this.object = object;
}
public Object get() {
return object;
}
}
Ejemplo 1: Uso de una clase que almacena un Object
EstucturasEstucturas de Datosde Datos PPááginagina 2626
Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics))
public class BoxDemo1 {
public static void main(String[] args) {
Box integerBox = new Box();
integerBox.add(new Integer(10));
Integer someInteger = (Integer)integerBox.get();
System.out.println(someInteger);
}
}
Ejemplo 1: Uso de una clase que almacena un Object
EstucturasEstucturas de Datosde Datos PPááginagina 2727
Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics))
public class BoxDemo2 {
public static void main(String[] args) {
Box integerBox = new Box();
integerBox.add("10");
// note que el tipo es ahora una cadena
Integer someInteger = (Integer)integerBox.get();
System.out.println(someInteger);
}
}
Ejemplo 1: Uso de una clase que almacena un Object
Error en Tiempo de Ejecución:
Exception in thread "main"
java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Integer at
BoxDemo2.main(BoxDemo2.java:5)
EstucturasEstucturas de Datosde Datos PPááginagina 2828
Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics))
/** * Versión genérica de la clase Box */
public class Box<T> {
private T t; // T de "Type"
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
}
Ejemplo 2: Uso de Tipo Genérico
EstucturasEstucturas de Datosde Datos PPááginagina 2929
Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics))
/** * Uso de la Versión genérica de la clase Box */
public class BoxDemo3 {
public static void main(String[] args) {
Box<Integer> integerBox = new Box<Integer>();
integerBox.add(new Integer(10));
Integer someInteger = integerBox.get(); // no cast!
System.out.println(someInteger);
}
}
Ejemplo 2: Uso de Tipo Genérico
EstucturasEstucturas de Datosde Datos PPááginagina 3030
Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics))
Ejemplo 3: Uso de Tipo Genérico
/** * Uso de la Versión genérica de la clase Box */
public class BoxDemo3 {
public static void main(String[] args) {
Box<Integer> integerBox = new Box<Integer>();
integerBox.add(new Integer(10));
Integer someInteger = integerBox.get(); // no cast!
System.out.println(someInteger);
}
}
Error en Tiempo de Compilación:
BoxDemo3.java:5: add(java.lang.Integer) in
Box<java.lang.Integer> cannot be applied to
(java.lang.String) integerBox.add("10");
^ 1 error

Más contenido relacionado

Similar a Tema6

Curso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacionCurso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacionLUISFERNANDOMORENOSO2
 
Estructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesEstructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesJosé Antonio Sandoval Acosta
 
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)José Antonio Sandoval Acosta
 
Informe técnico - Unidad 3 Estructuras no lineales (Rubí Verónica)
Informe técnico - Unidad 3 Estructuras no lineales (Rubí Verónica)Informe técnico - Unidad 3 Estructuras no lineales (Rubí Verónica)
Informe técnico - Unidad 3 Estructuras no lineales (Rubí Verónica)Rubi Veronica Chimal Cuxin
 
Sesion n°1 estructura de datos
Sesion n°1 estructura de datosSesion n°1 estructura de datos
Sesion n°1 estructura de datosJosé Braganza
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Juan Astudillo
 
Tipos de Colas en Programación en C++ - Presentación
Tipos de Colas en Programación en C++ - PresentaciónTipos de Colas en Programación en C++ - Presentación
Tipos de Colas en Programación en C++ - PresentaciónFernando Solis
 
Presentacion Lista, Cola y Pila
Presentacion Lista, Cola y PilaPresentacion Lista, Cola y Pila
Presentacion Lista, Cola y Pilathemvp16
 
Estructura de datos : Cola
Estructura de datos : ColaEstructura de datos : Cola
Estructura de datos : ColaEmerson Garay
 
Ejercicios pilas y_colas
Ejercicios pilas y_colasEjercicios pilas y_colas
Ejercicios pilas y_colaskelvinst
 

Similar a Tema6 (20)

Curso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacionCurso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacion
 
Pilas Colas
Pilas ColasPilas Colas
Pilas Colas
 
Datos
DatosDatos
Datos
 
Operaciones con colas
Operaciones con colasOperaciones con colas
Operaciones con colas
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
Estructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesEstructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras Lineales
 
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
 
Informe técnico - Unidad 3 Estructuras no lineales (Rubí Verónica)
Informe técnico - Unidad 3 Estructuras no lineales (Rubí Verónica)Informe técnico - Unidad 3 Estructuras no lineales (Rubí Verónica)
Informe técnico - Unidad 3 Estructuras no lineales (Rubí Verónica)
 
Sesion n°1 estructura de datos
Sesion n°1 estructura de datosSesion n°1 estructura de datos
Sesion n°1 estructura de datos
 
Practica 3
Practica  3Practica  3
Practica 3
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Tipos de Colas en Programación en C++ - Presentación
Tipos de Colas en Programación en C++ - PresentaciónTipos de Colas en Programación en C++ - Presentación
Tipos de Colas en Programación en C++ - Presentación
 
Presentacion Lista, Cola y Pila
Presentacion Lista, Cola y PilaPresentacion Lista, Cola y Pila
Presentacion Lista, Cola y Pila
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Estructura de datos : Cola
Estructura de datos : ColaEstructura de datos : Cola
Estructura de datos : Cola
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Programación 3: colas
Programación 3: colasProgramación 3: colas
Programación 3: colas
 
Ejercicios pilas y_colas
Ejercicios pilas y_colasEjercicios pilas y_colas
Ejercicios pilas y_colas
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 

Más de Pedro Sánchez

Más de Pedro Sánchez (20)

Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Guión didáctico
Guión didácticoGuión didáctico
Guión didáctico
 
Tarjeta Madre
Tarjeta MadreTarjeta Madre
Tarjeta Madre
 
Importancia de las redes sociales en la Educación
Importancia de las redes sociales en la EducaciónImportancia de las redes sociales en la Educación
Importancia de las redes sociales en la Educación
 
Evolucion de la web
Evolucion de la webEvolucion de la web
Evolucion de la web
 
Plagio en Internet Grupo los Integradores
Plagio en Internet Grupo los IntegradoresPlagio en Internet Grupo los Integradores
Plagio en Internet Grupo los Integradores
 
Tema8
Tema8Tema8
Tema8
 
Tema7
Tema7Tema7
Tema7
 
Tema5
Tema5Tema5
Tema5
 
Tema4
Tema4Tema4
Tema4
 
Tema3
Tema3Tema3
Tema3
 
Tema2
Tema2Tema2
Tema2
 
Tema1 (2)
Tema1 (2)Tema1 (2)
Tema1 (2)
 
Obj 10 capa 6 - presentacion
Obj 10   capa 6 - presentacionObj 10   capa 6 - presentacion
Obj 10 capa 6 - presentacion
 
Obj 9 capa 5 - sesion
Obj 9   capa 5 - sesionObj 9   capa 5 - sesion
Obj 9 capa 5 - sesion
 
Obj 8 capa 4 - transporte
Obj 8   capa 4 - transporteObj 8   capa 4 - transporte
Obj 8 capa 4 - transporte
 
Obj 7.4 capa 3 - red - router
Obj 7.4   capa 3 - red - router Obj 7.4   capa 3 - red - router
Obj 7.4 capa 3 - red - router
 
Obj 7.3 capa 3 - red - sub redes
Obj 7.3   capa 3 - red - sub redes Obj 7.3   capa 3 - red - sub redes
Obj 7.3 capa 3 - red - sub redes
 
Obj 7.2 capa 3 - red - ip clase d-e sub redes
Obj 7.2   capa 3 - red - ip clase d-e sub redes Obj 7.2   capa 3 - red - ip clase d-e sub redes
Obj 7.2 capa 3 - red - ip clase d-e sub redes
 
Obj 7.1 capa 3 - red - direccionamiento ip
Obj 7.1   capa 3 - red - direccionamiento ipObj 7.1   capa 3 - red - direccionamiento ip
Obj 7.1 capa 3 - red - direccionamiento ip
 

Último

Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 

Último (15)

Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 

Tema6

  • 1. EstucturasEstucturas de Datosde Datos PPááginagina 11 Unidad III Tema 6: Pilas, Colas y Listas Profesor: Jorge Escalona / Tobías Bolívar Email: escaljorge@gmail.com / tobiasbolivar@gmail.com Página Web: http://estructuradatos.tripod.com
  • 2. EstucturasEstucturas de Datosde Datos PPááginagina 22 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales • Pilas • Colas • DiColas • Listas Enlazadas – Listas Simplemente Enlazadas – Listas Doblemente Enlazadas Contenido: 1 2 3 4 n frente final Roma Caracas Paris cabecera
  • 3. EstucturasEstucturas de Datosde Datos PPááginagina 33 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Pilas • Una Pila es un contenedor de objetos que son insertados y removidos de acuerdo al principio Last-In First-Out (LIFO). • Operaciones básicas: Inserta el objeto elem en la cima de la pila. Entrada:Object; Salida: Ninguna Remueve y retorna el objeto de la cima de la pila. Un error ocurre si la pila está vacía. Entrada: Object; Salida: Object. Retorna el número de objetos en la pila. Entrada: Ninguna; Salida: Entero; Retorna un valor booleano inicando si la pila está vacía. Entrada: Ninguna: Salida: Boolean Retorna el objeto de la cima de la pila, sin removerlo; Entrada: Ninguna; Salida: Object Agregar(elem): Remover(elem): Longitud(): PilaVacia(): Cima()
  • 4. EstucturasEstucturas de Datosde Datos PPááginagina 44 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Pilas - Implementación con un Arreglo Algoritmo Longitud(): return cima + 1. Algoritmo PilaVacia(): return (cima<0). Algoritmo Cima(): if PilaVacia() then Generar ErrorPilaVacia return Elementos[cima]. Algoritmo Agregar(elem): if Longitud() = Max then generar ErrorPilaLlena cima ← cima + 1 Elementos[cima] ← elem. Algoritmo Remover(): if PilaVacia() then generar ErrorPilaVacia elem -> elementos[cima] elementos[cima] ← null cima ← cima - 1 return elem.
  • 5. EstucturasEstucturas de Datosde Datos PPááginagina 55 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Colas • Una Cola es un contenedor de objetos que son insertados y removidos de acuerdo al principio FIFO (First-in First-Out). • Operaciones básicas: Inserta el objeto elem al final de la cola. Entrada:Object; Salida: Ninguna Remueve y retorna el objeto del frente de la cola. Un error ocurre si la cola está vacía. Entrada: Object; Salida: Object. Retorna el número de objetos en la cola. Entrada: Ninguna; Salida: Entero; Retorna un valor booleano inicando si la cola está vacía. Entrada: Ninguna: Salida: Boolean Retorna el objeto del frente de la cola, sin removerlo; Entrada: Ninguna; Salida: Object Agregar(elem): Remover(elem): Longitud(): ColaVacia(): Frente()
  • 6. EstucturasEstucturas de Datosde Datos PPááginagina 66 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Colas - Implementaciones con Arreglos Lineales •Se utilizan dos índices para manipular la cola: frente (elemento al inicio) y final (elemento en el final). •Para agregar un elemento, se incrementa el índice final, considerando que la cola no esté llena (final = max). 1 2 3 4 .... n D S A frente final 1 2 3 4 .... n D S A P frente final A) Cola Original. B) Cola resultante después de insertar el elemento ‘P’.
  • 7. EstucturasEstucturas de Datosde Datos PPááginagina 77 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Colas - Implementaciones con Arreglos Lineales •Para remover un elemento, se tienen dos opciones: •Se incrementa el índice frente para apuntar al siguiente elemento. La desventaja de esta opción es que se puede subutilizar el espacio del arreglo. •Se mantiene el índice frente siempre en la primera posición del arreglo y se mueven los elementos en la cola una posición. La desventaja de esta opción es el costo de desplazar los elementos para una cola medianamente grande. 1 2 3 4 .... n D S A P frente final A) Cola Original. B) Cola resultante después de eliminar un elemento. 1 2 3 4 .... n D S A P frente final A) Cola Original. 1 2 3 4 .... n S A P frente final B) Cola resultante después de eliminar un elemento. 1 2 3 4 .... n S A P frente final
  • 8. EstucturasEstucturas de Datosde Datos PPááginagina 88 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Colas - Implementaciones con Arreglos Circulares • Se puede seguir agregando elementos a la cola aún si el índice frente apunta al último elemento del arreglo, insertándolo en la primera posición si no está ocupada. • Para agregar un elemento se mueve el índice final hacia delante una posición según la siguiente fórmula: final ← (final + 1) mod N • Para eliminar un elemento se mueve el índice frente hacia delante una posición según la siguiente fórmula: frente ← (frente + 1) mod N 1 2 3 4 n frente final 1 2 3 4 n frente final 1 2 3 4 n frente final
  • 9. EstucturasEstucturas de Datosde Datos PPááginagina 99 Colas - Implementaciones con Arreglos Circulares Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales • Inicialmente, tanto el índice frente como final, apuntan al primer elemento del arreglo. De aquí, se establece la condición de cola vacía si frente = final. (figura a) • El índice final, siempre apunta a una posición vacía del arreglo, la siguiente al último elemento de la cola. (figura b) • Para evitar que después de insertar n elementos sin desencolar ninguno, final vuelva a apuntar a frente, lo cual haría coincidir las condiciones de pila vacia con la de pila llena, se sacrifica una posición del arreglo, de tal forma que la condición de pila llena se presenta cuando siguiente(final) = frente. (figura c) 1 2 3 4 n frente final 1 2 3 4 n frente final DG X n-1 n-1 1 2 3 4 n DG X n-1 frente L K . . . . . . . . . (Figura a) (Figura b) (Figura c) final
  • 10. EstucturasEstucturas de Datosde Datos PPááginagina 1010 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Colas - Implementación con Arreglos Circulares Algoritmo Longitud(): return (Max-frente+final) mod Max. Algoritmo ColaVacia(): return (frente = final). Algoritmo Frente(): if ColaVacia() then Generar ErrorColaVacia return Elementos[frente]. Algoritmo Encolar(elem): if Longitud() = Max - 1 then generar ErrorColaLlena Elementos[final] ← elem final ← (final + 1) mod Max. Algoritmo Desencolar(): if ColaVacia() then generar ErrorColaVacia elem -> elementos[frente] elementos[frente] ← null frente ← (frente + 1) mod Max return elem. Nota: Las fórmulas para el cálculo de frente y final son válidas si la numeración del arreglo comienza en cero. Para arreglos cuya numeración comience en 1, hay que sumarles 1 al resultado de la fórmula.
  • 11. EstucturasEstucturas de Datosde Datos PPááginagina 1111 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales DiColas • Una DiCola es un contenedor de objetos que pueden ser insertados y removidos tanto como por el inicio como por el final. • Operaciones básicas: Inserta el objeto elem al inicio de la cola. Entrada:Object; Salida: Ninguna Inserta el objeto elem al final de la cola. Entrada:Object; Salida: Ninguna Remueve y retorna el objeto del frente de la cola. Entrada: Object; Salida: Object. Remueve y retorna el objeto del final de la cola. Entrada: Object; Salida: Object. Retorna el número de objetos en la cola. Entrada: Ninguna; Salida: Entero; Retorna un valor booleano inicando si la cola está vacía. Entrada: Ninguna: Salida: Boolean Retorna el objeto del frente de la cola, sin removerlo; Entrada: Ninguna; Salida: Object Retorna el objeto del final de la cola, sin removerlo; Entrada: Ninguna; Salida: Object AgregarInicio(elem): AgregarFinal(elem): RemoverInicio(elem): RemoverFinal(elem): Longitud( ): DiColaVacia( ): Frente( ): Final( ):
  • 12. EstucturasEstucturas de Datosde Datos PPááginagina 1212 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Implementando Pilas y Colas con DiColas Métodos de Pila Longitud() PilaVacia() Cima() Agregar(elem) Remover() Métodos de DiCola Longitud() DiColaVacia() Final() AgregarFinal(elem) RemoverFinal() Métodos de Cola Longitud() ColaVacia() Frente() Agregar(elem) Remover() Métodos de DiCola Longitud() DiColaVacia() Frente() AgregarFinal(elem) RemoverFrente() • Implementando una Pila con una DiCola • Implementando una Cola con una DiCola
  • 13. EstucturasEstucturas de Datosde Datos PPááginagina 1313 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Implementando Pilas y Colas con DiColas • Usando una DiCola para implementar una Pila o una Cola, es un ejemplo de un adaptador de plantilla. Un adaptador de plantilla, implementa una clase utilizando métodos de alguna otra clase. • En general, un adaptador de una clase especializa una clase más general. • Se puede aplicar de dos formas: • Especializar una clase más general modificando algunos métodos. Ejemplo: Implementar una Pila con una DiCola. • Especializar los tipos de objetos usados por una clase más general. Ejemplo: Definir una clase PilaEnteros que la clase Pilas para sólo almacenar números enteros.
  • 14. EstucturasEstucturas de Datosde Datos PPááginagina 1414 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Listas Enlazadas • Una lista enlazada es un tipo general de una estructura de dato utilizada para almacenar una colección de elementos sin un tamaño predefinido. • Alternativa para representar estructuras de datos lineales donde no se conoce de antemano la cantidad de elementos a almacenar. • La forma más simple de una lista enlazada es una lista simplemente enlazada, la cual consiste de una colección de nodos que juntos forman una colección lineal. Nueva York Roma Caracas cabecera sig sig sig sig elemento elemento elemento elemento Paris
  • 15. EstucturasEstucturas de Datosde Datos PPááginagina 1515 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Listas Simplemente Enlazadas • En una lista simplemente enlazada, cada nodo es un objeto compuesto que guarda una referencia a un elemento y una referencia, llamada siguiente (next), a otro nodo. • El primer y último nodo de una lista enlazada usualmente son llamados el nodo cabecera (head) y el nodo cola (tail), respectivamente. • Se identifica la cola como el nodo que tiene en siguiente una referencia null, lo cual indica el fin de la lista. • El enlace al siguiente elemento nos permite alcanzar cualquier nodo de la lista comenzando desde el nodo cabecera. A esta operación se le llama recorrer la lista. Nueva York Roma Caracas cabecera sig sig sig sig elemento elemento elemento elemento Paris
  • 16. EstucturasEstucturas de Datosde Datos PPááginagina 1616 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Implementación de Listas Simplemente Enlazadas • Para implementar una lista simplemente enlazada se definen dos clases: • La clase Nodo, la cual especifica el formato de los objetos asociados con los nodos de la lista; • La clase ListaEnlazada, la cual mantiene una referencia al nodo cabecera de la lista y, adicionalmente, cualquier otra información que pueda facilitar la manipulación de la lista. Como por ejemplo, una referencia al nodo cola, o el número de elementos que existen en la lista.
  • 17. EstucturasEstucturas de Datosde Datos PPááginagina 1717 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Inserción y Eliminación en la cabecera de la lista. Nueva York Roma Caracas Paris Nueva York Roma Caracas Paris cabecera cabecera Roma Caracas Paris cabecera
  • 18. EstucturasEstucturas de Datosde Datos PPááginagina 1818 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Implementando una Pila con una Lista Simplemente Enlazada • La implementación del TAD Pila utilizando una Lista Simplemente Enlazada es bastante sencilla. • Se utiliza la cabecera como la cima de la pila ya que la operación de eliminación es más facil por este extremo de la lista que por la cola. • Para facilidad y rapidez en ejecución de los métodos del TAD Pila, se mantiene un contador del número de elementos actuales de la lista. • La implementación de una pila sobre una lista simplemente enlazada tiene una importante ventaja sobre la implementación basada en un arreglo, ya que no requiere que se defina explícitamente un límite superior al tamaño de la pila, por lo cual es libre de crecer o decrecer arbitrariamente. Roma Caracas Paris cabecera (cima)
  • 19. EstucturasEstucturas de Datosde Datos PPááginagina 1919 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Implementando una Cola con una Lista Simplemente Enlazada • Al igual que para el TAD Pila, la implementación del TAD Cola utilizando una Lista Simplemente Enlazada es bastante sencilla. • Se utiliza la cabecera como el frente de la cola y el último nodo (nodo cola) como el final de la cola. Por qué no lo contrario? • Para facilidad y rapidez en ejecución de los métodos del TAD Cola, se mantiene un contador del número de elementos actuales de la lista. • A pesar de que la implementación de una cola sobre una lista simplemente enlazada presenta las mismas ventajas que una pila sobre un arreglo, la implementación de los métodos es un poco más complicada. Roma Caracas Paris cabecera (frente) final
  • 20. EstucturasEstucturas de Datosde Datos PPááginagina 2020 Unidad III: Estructuras de Datos LinealesUnidad III: Estructuras de Datos Lineales Implementando una DiCola con una Lista Doblemente Enlazada • Remover un elemento en el final de una lista simplemente enlazada no puede ser realizado en tiempo lineal. • Para evitar este problema, la implementación de una DiCola se basa en una lista doblemente enlazada. • Cada uno de los nodos de la lista doblemente enlazada tiene un enlace siguiente (elemento siguiente) y un enlace previo (elemento anterior). • Se utilizan nodos especiales de cabecera (header) y remolque (trailer). • El nodo cabecera va antes del primer elemento de la lista. Tiene un enlace siguiente válido, pero un enlace previo nulo. • El nodo remolque va después del último elemento de la lista. Tiene un enlace previo válido, pero un enlace siguiente nulo. • Los nodos cabecera y remolque son sólo nodos sentinelas; ellos no guardan ningún elemento. Roma Caracas Paris cabecera remolque
  • 21. EstucturasEstucturas de Datosde Datos PPááginagina 2121 Unidad III: El JavaUnidad III: El Java CollectionsCollections Framework (JFC)Framework (JFC) • El Java Collections Framework (JFC) es una arquitectura unificada para representar y manipular colecciones. Contiene los siguientes elementos: – Interfaces: Tipos abstractos de datos que representan las colecciones. Permiten manipularlas con independencia de los detalles de su implementación. – Implementaciones: clases que implementan las interfaces anteriores. – Algoritmos: Métodos que realizan de forma eficiente tareas habituales, como búsquedas y ordenaciones, sobre objetos que implementan las interfaces de la estructura de colecciones.
  • 22. EstucturasEstucturas de Datosde Datos PPááginagina 2222 Unidad III: El JavaUnidad III: El Java CollectionsCollections Framework (JFC)Framework (JFC) • Las interfaces del JFC encapsulan diferentes tipos de colecciones las cuales permiten que sean manipuladas independientemente de su implementación. • Todas las interfaces son definidas de forma genérica. Por ejemplo, la declaración de la interfaz Collection está definida de la siguiente manera: public interface Collection<E>... Interfaces:
  • 23. EstucturasEstucturas de Datosde Datos PPááginagina 2323 Unidad III: El JavaUnidad III: El Java CollectionsCollections Framework (JFC)Framework (JFC) • Collection: Es la raíz de la jerarquía de las colecciones. Representa un grupo de objetos conocidos como sus elementos. • Set: Una colección que no permite elementos duplicados. Esta interfaz modela la definición de conjuntos matemáticos. • List: Una colección o secuencia ordenada. Permite elementos duplicados. • Queue: Una colección usada para almacenar múltiples elementos con prioridad para su procesamiento. • Map: Un objeto que mapea claves con valores. Un objeto Map no puede contener claves duplicadas. • SortedSet: Un conjunto que mantiene sus elementos en orden ascendente. • SortedMap: Un objeto Map que mantiene sus valores mapeados en orden ascendente según la clave de cada mapeo. Interfaces:
  • 24. EstucturasEstucturas de Datosde Datos PPááginagina 2424 Unidad III: El JavaUnidad III: El Java CollectionsCollections Framework (JFC)Framework (JFC) • Son las clases que implementan las interfaces del JFC. Manejan los datos contenidos en las colecciones. Implementaciones:
  • 25. EstucturasEstucturas de Datosde Datos PPááginagina 2525 Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics)) public class Box { private Object object; public void add(Object object) { this.object = object; } public Object get() { return object; } } Ejemplo 1: Uso de una clase que almacena un Object
  • 26. EstucturasEstucturas de Datosde Datos PPááginagina 2626 Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics)) public class BoxDemo1 { public static void main(String[] args) { Box integerBox = new Box(); integerBox.add(new Integer(10)); Integer someInteger = (Integer)integerBox.get(); System.out.println(someInteger); } } Ejemplo 1: Uso de una clase que almacena un Object
  • 27. EstucturasEstucturas de Datosde Datos PPááginagina 2727 Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics)) public class BoxDemo2 { public static void main(String[] args) { Box integerBox = new Box(); integerBox.add("10"); // note que el tipo es ahora una cadena Integer someInteger = (Integer)integerBox.get(); System.out.println(someInteger); } } Ejemplo 1: Uso de una clase que almacena un Object Error en Tiempo de Ejecución: Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at BoxDemo2.main(BoxDemo2.java:5)
  • 28. EstucturasEstucturas de Datosde Datos PPááginagina 2828 Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics)) /** * Versión genérica de la clase Box */ public class Box<T> { private T t; // T de "Type" public void add(T t) { this.t = t; } public T get() { return t; } } Ejemplo 2: Uso de Tipo Genérico
  • 29. EstucturasEstucturas de Datosde Datos PPááginagina 2929 Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics)) /** * Uso de la Versión genérica de la clase Box */ public class BoxDemo3 { public static void main(String[] args) { Box<Integer> integerBox = new Box<Integer>(); integerBox.add(new Integer(10)); Integer someInteger = integerBox.get(); // no cast! System.out.println(someInteger); } } Ejemplo 2: Uso de Tipo Genérico
  • 30. EstucturasEstucturas de Datosde Datos PPááginagina 3030 Unidad III: Tipos GenUnidad III: Tipos Genééricos en Javaricos en Java ((GenericsGenerics)) Ejemplo 3: Uso de Tipo Genérico /** * Uso de la Versión genérica de la clase Box */ public class BoxDemo3 { public static void main(String[] args) { Box<Integer> integerBox = new Box<Integer>(); integerBox.add(new Integer(10)); Integer someInteger = integerBox.get(); // no cast! System.out.println(someInteger); } } Error en Tiempo de Compilación: BoxDemo3.java:5: add(java.lang.Integer) in Box<java.lang.Integer> cannot be applied to (java.lang.String) integerBox.add("10"); ^ 1 error