2. Contenido
Estructura de LISTA
Estructura PILA
Estructura COLA
3. Definiciones
Es una estructura de datos secuencial.
Es una estructura de datos homogénea y dinámica, que va a estar formada por
una secuencia de elementos, donde cada uno de ellos va seguido de otro o de
ninguno.
Homogénea: Todos los elementos que la forman tienen el mismo tipo base.
Dinámica: Puede crecer o decrecer en tiempo de ejecución según nuestras
necesidades. dos listas pueden ser diferentes si:
Las listas son secuencias de 0 ó más elementos de un tipo de datos almacenados
en memoria. Son estructuras lineales donde cada elemento de una lista excepto el
primero tiene un único predecesor y cada elemento de la lista excepto el último
tiene sucesor.
5. TAD Lista
Nombre: TAD Lista
Invariante: n/a
Operaciones:
crearLista ()
*/Devuelve un valor del tipo pila preparado para ser usado y que contiene un valor de pila vacía. Esta operación es la misma
que la de las listas generales.*/
preCond: N=0
posCond: Lista creada
insertar(crearLista, x pos)
*/mediante este método se insertan datos a la lista ya creada. Inserta elemento x en pos*/
preCond: pos ¡= null
posCond: insertarLista completado (dato insertado en Lista)
Fin():
*/Retorna la posición del último elemento, en otras palabras el “fin” de la lista, también se puede considerar con el tamaño de
la lista. Sí la lista está vacía retorna una posición invalida que podría ser -1.*/
preCond: n/a
posCond: operación finalizada
siguiente(pos)
*/con este método se retorna pos + 1, si pos es ≥ a fin(), retorna fin().*/
preCond: pos!=0
posCond: retorna pos
anterior(pos)
*/con este método se retorna pos -1.*/
preCond: pos!=0
posCond: retorna pos
limpiar(pos)
*/limpia la lista y finaliza fin()*/
preCond: n…n+a, pos =0
posCond: lista vacia…
6. Relación entre Ventana y Lista
Una ventana es un área visual, normalmente de forma rectangular de
usuario, mostrando la salida y permitiendo la entrada de datos para
uno de varios procesos que se ejecutan simultáneamente.
La misma consiste en una secuencia de nodos, en los que se guardan
campos de datos arbitrarios y una o dos referencias (punteros) al nodo
anterior o posterior.
La relación es que con ambos términos nos referimos a manipulación
de datos sin importar el orden de los mismos, solo el acceso y su
modificación.
7. Implementación
Para representar en lenguaje C en esta estructura de datos se utilizarán
punteros, un tipo de datos que suministra el lenguaje. Se representará una
lista vacía con la constante Null. Se puede definir la lista enlazada de la
siguiente manera:
struct lista{
Int clave;
Struct lista *sig;
};
8. E1. Vectores
Utilizando una estructura de datos estática arreglo para representar e implementar el TAD Listas.
Asumamos que los elementos que contiene la lista son representados por el tipo entero. La cantidad de
elementos que puede contener la lista tiene un máximo de n elementos. Por lo que la representación formal
de este tipo se define de la siguiente manera: tipo Lista= arreglo [1..n] de enteros; Varl:lista;
Implementación Procedimiento: Operaciones básicas.
Lista_vacia (var L: Lista)
Var i: entero;
Principio
Para i:= 1 hasta n hacer L[i]:=0;
Fin;
Función es_vacia(l:lista):lógico
Principio
Si L[1] = 0 entonces es_vacia:= verdad
Sino es_vacia:= falso;
Fin;
Procedimiento insertar (var l:lista, p:
9. E2. Listas doblemente enlazadas
Una lista enlazada es una de las estructuras de datos
fundamentales, y puede ser usada para implementar otras
estructuras de datos. Consiste en una secuencia de nodos, en los
que se guardan campos de datos arbitrarios y una o dos referencias
(punteros) al nodo anterior o posterior.
El principal beneficio de las listas enlazadas respecto a los array
convencionales es que el orden de los elementos enlazados puede
ser diferente al orden de almacenamiento en la memoria o en el
disco, permitiendo que el orden de recorrido de la lista sea
diferente al de almacenamiento.
Una ventaja es que pueden recorrerse en ambos sentidos, ya sea
para efectuar una operación con cada elemento o para insertar y/o
actualizar y borrar.
10. Como los lenguajes de programación permiten
implementar las listas
En java se encuentra un paquete completo en java.util de donde
se pueden utilizar las listas, como un tipo abstracto de datos, este
tipo de estructura de datos también se utiliza a partir de una
interfaz.
En C se utilizan los llamados punteros para representar esta
estructura de datos.
11. Estructura PILA
Definiciones
Es un caso especial de lista en la cual todas las inserciones y supresiones
tienen lugar en un extremo determinado llamado tope.
Las pilas también son llamadas listas LIFO (Last In- First Out). En el TAD Pila no
se definen operaciones de posicionamiento en la pila. Esto es debido a que
todas las operaciones de acceso se realizan en la misma posición, o sea en el
tope de la pila.
13. Implementación
Nombre: TAD Pila
Invariante: n<>0
Operaciones:
crearPila()
*/Devuelve un valor del tipo pila preparado para ser usado y que contiene un valor de pila vacía. Esta operación es
la misma que la de las listas generales.*/
preCond: N=0
posCond: pila creada
insertarPila(crearPila)
*/mediante este método se insertan datos a la pila ya creada. Con estas se usa el método push para insertar*/
preCond: pila<>null
posCond: insertarPila completado (datos insertados en pila)
borrarPila()
*/con este método se elimina cierta pila de datos*/
preCond: pila<>null
posCond: pila eliminada
14. Estructura COLA
Es una estructura de datos lineal en donde las
eliminaciones se realizan por uno de sus
extremos que normalmente se llama frente, y
las inserciones se realizan por el otro extremo
que normalmente se llama final. A estas
estructuras se les llama FIFO (First-In First-Out).
15. Implementación
Nombre: TAD Cola
Invariante: n/a
Operaciones:
crearCola()
*/Devuelve un valor del tipo cola preparado para ser usado y que contiene un valor de pila vacia. Esta operación es la
misma que la de las listas generales.*/
preCond: N=0
posCond: cola vacia creada
insertarCola(crearCola)
*/mediante este método se insertan datos a la cola ya creada.*/
preCond: cola<>null
posCond: datos insertados en la cola, cola insertada.
borrarCola()
*/con este método se elimina cierta cola de datos*/
preCond: cola!=0
posCond: cola eliminada
16. Particularidades de un TAD Cola
con prioridades
Se introduce una forma de simular generalidad en los TADs de Modula-2
mediante el uso del TAD ITEM.
En una cola de prioridad los elementos están ordenados dependiendo de
su prioridad, de manera que esté disponible (para las operaciones Frente y
Extraer) el elemento de máxima prioridad. En caso de igualdad se sigue la
regla FIFO de dos elementos con igual prioridad, sale primero el que entra
primero. Esto se puede conseguir bien insertando ordenadamente y
extrayendo el primer elemento.
17. Implementación de Cola con
vectores circulares.
Public class Cola {
Private static int max = 100;
Private Objetc elementos[];
Private int frente, post;
}