Sunteți pe pagina 1din 25

TIPOS DE DATOS ABSTRACTOS - TDA

Karim Guevara Puente de la Vega


Índice

 TDA lista
 TDA pila
 TDA cola
 TDA cola de prioridad
Introducción

 Un Tipo de dato abstracto (TDA) es un conjunto de datos u objetos


asociados a operaciones
 El TDA provee una interfaz con la cual es posible realizar las
operaciones permitidas sin considerar la forma como están
implementadas.
 Un TDA puede ser implementado de diferentes formas sin afectar la
funcionalidad
 Utilizando diferentes estructuras de datos
 POO, permite encapsular los datos y las operaciones
 Clases e interfaces
TDA lista

 Una lista se define como una serie de N elementos E1, E2,…,EN


ordenamos de manera consecutiva.

 Operaciones:
 Insertar un elemento en la posición K
 Borra el k-ésimo elemento
 Buscar un elemento
 Consultar si la lista está vacía
TDA lista

 Implementada: arreglos y listas enlazadas


 Operaciones:
 estaVacia(): devuelve verdadero si la lista esta vacía, falso en caso
contrario.
 insertarInicio(x): inserta el elemento x al inicio de la lista.
 insertar(x, k): inserta el elemento x en la k-ésima posición de la lista.
 buscar(x): devuelve la posición en la lista del elemento x.
 buscarK(k): devuelve el k-ésimo elemento de la lista.
 eliminar(x): elimina de la lista el elemento x.
Listas enlazadas

 Una lista enlazada es una serie de nodos, conectados entre sí a


través de una referencia.
class NodoLista <T> {
T elemento;
NodoLista<T> siguiente;
}

 P.e. lista enlazada de String


Listas enlazadas - recorrido

 La referencia lista indica la posición del primer elemento de la lista

NodoLista<T> aux = lista;

aux = aux.siguiente;
Listas enlazadas - inserción

 Inserción después del nodo referenciado

NodoLista<T> nuevo = new NodoLista<T>(...);


nuevo.siguiente = aux.siguiente;
aux.siguiente = nuevo;
Listas enlazadas – Ejemplo recorrido

void recorrido(NodoLista<T> lista)


{ NodoLista<T> aux = lista;
while (aux != null) {
System.out.println(aux.elemento);
aux = aux.siguiente;
}
}
Listas enlazadas dobles y circulares
Listas enlazadas con cabecera
TDA lista : lista enlazada (LinkedList)

 Caso especial: inserción del primer elemento y la eliminación del


primer?...
 Utilizar nodo cabecera: todos los casos son iguales
TDA lista

 Clase NodoLista
 Clase Lista

 Costo de las operaciones en tiempo:


 Insertar/eliminar elemento en k-ésima posición: O(k)
(¿Se puede hacer en O(1)?).
 Buscar elemento x: O(N) (promedio).
TDA Pila

 Lista de elementos de la cual sólo se


puede extraer el último elemento
insertado.
 La posición en donde se encuentra dicho
elemento se denomina tope de la pila.
 Se conoce a las pilas como listas LIFO
(LAST IN - FIRST OUT: “el último que
entra es el primero que sale”).
TDA Pila: interfaz

 apilar(x): inserta el elemento x en el tope de la pila (push).


 desapilar(): retorna el elemento que se encuentre en el tope de la pila y
lo elimina de ésta (pop).
 tope(): retorna el elemento que se encuentre en el tope de la pila, pero sin
eliminarlo de ésta (top).
 esVacia(): retorna verdadero si la pila no contiene elementos, falso en caso
contrario (isEmpty).
public interface Pila<E> {
void apilar(E x);
E desapilar() throws ExcepcionEsVacia;
E tope() throws ExcepcionEsVacia;
boolean esVacia();
}
TDA Stack - implementación
<<interface>>
Pila

PilaArray PilaLink

 Array genérico : representación sencilla de  La cima/tope esta representada por una


un Pila genérica en el que se mantenga una extremo de la lista
referencia al tope  Cuál será la cima?.
TDA Cola

 Una cola (queue) es una lista de elementos en donde siempre se


insertan nuevos elementos al final de la lista y se extraen elementos
desde el inicio de la lista.
 Se les conoce como listas FIFO (FIRST IN - FIRST OUT: “el primero
que entra es el primero que sale”).
TDA Cola: interfaz

 encolar(x): inserta el elemento x al final de la cola (enqueue ).


 desencolar(): retorna el elemento que se ubica al inicio de la cola
(dequeue).
 esVacia(): retorna verdadero si la cola esta vacía, falso en caso contrario.
 final(): retorna el elemento del final de la cola (back)
 frente(): retorna el elemento del frente de la cola (front)
public interface Cola<E> {
void encolar(E x);
E desencolar() throws ExcepcionEsVacia;
E frente() throws ExcepcionEsVacia;
E final() throws ExcepcionEsVacia;
boolean esVacia();
}
TDA Queue- implementación

<<interface>>
Cola

ColaArray ColaLink

Implementación en Implementación en
base a arreglos base a listas enlazadas
TDA Cola: implementación

 Arreglos -
 primero: posición del elemento a retornar cuando se invoque sacar.
 ultimo: índice del último elemento.
 numElem: cuántos elementos hay en la cola.
TDA Cola: implementación

 Arreglo circular -
 Aritmética de subíndices módulo MAX_ELEM

 Cuál es el costo de las operaciones?


TDA Cola: implementación

 Listas enlazadas -
 Sin cabeza:
Hay dos variables Primero y Ultimo.
 Con cabeza:
 cabecera.siguiente almacena referencia del Primero, y se requiere el Ultimo.
TDA Cola de Prioridad /PriorityQueue

 Una cola de prioridad es un TAD que almacena un conjunto de datos


que poseen una llave perteneciente a algún conjunto ordenado, y
permite insertar nuevos elementos y extraer el máximo (o el
mínimo, en caso de que la estructura se organice con un criterio de
orden inverso).
 Es frecuente interpretar los valores de las llaves como prioridades,
con lo cual la estructura permite insertar elementos de prioridad
cualquiera, y extraer el de mejor prioridad.
TDA Cola de Prioridad: implementación

 Tres formas simples de implementar colas de prioridad son:


 Una lista ordenada:
Inserción: O(n)
Extracción de máximo: O(1)
 Una lista desordenada:
Inserción: O(1)
Extracción de máximo: O(n)
 Varias colas, asociadas a una lista de colas
Inserción: O(1) + O(L)
Extracción de máximo: O(1)+O(1)
TAD Cola Prioridad - implementación

S-ar putea să vă placă și