El documento define y explica los tipos abstractos de datos (TAD). Explica que un TAD especifica un conjunto de valores y operaciones que cumplen ciertas propiedades. Luego se enfoca en especificar formal y informalmente el TAD de listas, incluyendo sus operaciones, tipos de nodos, y formas de implementarlas de manera estática y dinámica usando punteros. Finalmente, presenta otros TADs comunes como pilas y colas.
2. Definición
Un tipo abstracto de datos (TAD) es un conjunto de
valores junto con las operaciones que sobre el se
pueden aplicar, las cuales cumplirán diversas
propiedades que determinarán su comportamiento.
Es necesario utilizar una notación formal para
describir el comportamiento de las operaciones.
3. Definición
El calificativo “abstracto” responde al hecho de que
los valores de un tipo pueden ser manipulados
solamente mediante sus operaciones, conociendo
únicamente sobre ellas las propiedades que
cumplen, sin que sea necesario ningún
conocimiento adicional sobre la representación del
tipo o la implementación de dichas operaciones.
4. Especificación frente a implementación
La manipulación de los objetos de un tipo solo
depende del comportamiento descrito en su
especificación y es independiente de su
implementación.
La especificación de un TAD consiste en establecer
las propiedades que lo definen. Una especificación
ha de ser precisa, general, legible y no ambigua. La
especificación de un tipo define totalmente su
comportamiento a cualquier usuario que lo necesite.
5. Especificación frente a implementación
La implementación de un TAD consiste en
determinar una representación para los valores del
tipo y en codificar sus operaciones a partir de esta
representación, todo ello utilizando un lenguaje de
programación.
Una implementación del TAD es totalmente
transparente a los usuarios del tipo y no se puede
escribir hasta haber determinado claramente su
especificación.
6. Especificación de TADs
Especificar un TAD consiste en establecer las
propiedades que lo definen:
Colección de Objetos
Operaciones sobre los Objetos
La especificación puede ser:
Formal - Algebraica
Informal - Lenguaje Natural
7. Especificación Algebraica de TADs
Una especificación algebraica consta fundamental-
mente de tres componentes:
Tipos: son nombres de conjuntos de valores. Entre
ellos está el tipo principal del TAD, aunque puede
haber también otros que se relacionen con este.
8. Especificación Algebraica de TADs
Operaciones: son funciones con un perfil asociado
que indica el tipo de cada uno de los argumentos y
el tipo del resultado. En una especificación
algebraica no se permiten funciones que devuelvan
varios valores, ni tampoco procedimientos no
funcionales.
Ecuaciones: son igualdades entre términos
formados con las operaciones y variables, y definen
el comportamiento de las operaciones.
10. Clasificación de las Operaciones
Para escribir las ecuaciones es necesario clasificar
las operaciones según el papel que queremos que
jueguen en relación con el tipo principal s:
Constructoras (o generadoras): devuelven un valor
de tipo s. Pensadas para construir todos los valores
de tipo s. Puede haber más de un subconjunto de
operaciones generadoras, del que habría que elegir
uno.
11. Clasificación de las Operaciones
Modificadoras: devuelven también un valor de tipo
s. Pero están pensadas para hacer cálculos que
produzcan resultados de tipo s.
Observadoras: devuelven un valor de un tipo
diferente a s. Pensadas para obtener valores de
otros tipos a partir de valores de tipo s.
21. TIPOS de TADs Clásicos
Existen TADs de Uso frecuente, generalmente para
el manejo de estructuras de datos complejas:
TAD LISTA
TAD PILA
TAD COLA
22. TAD LISTA
LISTA
Una lista enlazada es una secuencia de nodos en el
que cada nodo está enlazado o conectado con el
siguiente.
La lista enlazada es una estructura de datos dinámica
cuyos nodos suelen ser normalmente registros y que
no tienen un tamaño fijo.
23. TAD LISTA
Se utiliza para almacenar información del mismo tipo.
Pueden contener un número indeterminado de
elementos, y éstos elementos mantienen un orden
explícito ya que cada elemento contiene en sí mismo
la dirección del siguiente elemento.
Una lista es una secuencia de 0 a n elementos. A la
lista de cero elementos llamaremos lista vacía
24. TAD LISTA
Matemáticamente, una lista es una secuencia de cero
o más elementos de un determinado tipo.
(a1,a2 , a3 ..., an) donde n > = 0
Si n = 0 la lista es vacía.
Los elementos de la lista tienen la propiedad de que
están ordenados de forma lineal, según las posiciones
que ocupan en la misma. Se dice que ai precede a ai+1
para i = 1, 2, 3,..., n -1 y que ai sucede a ai-1 para i = 2,
3,..., n.
25. Especificación del TAD LISTA (Formal)
TAD lista (VALORES: secuencia de elementos;
OPERACIONES:Inicia, Localiza, Recupera, Inserta,
SuprimeDir, Modifica)
Sintaxis:
*Inicia (Lista ) → Lista
Localiza (Lista, Elemento) → Posicion
Recupera (Lista, Posicion) → Elemento
*Inserta (Lista, Posicion, Elemento) → Lista
SuprimeDir(Lista, Posicion) → Lista
Modifica (Lista, Posicion, Elemento) → Lista
Semántica:
SuprimeDir(Inicia (Lista )) ⇒ error
SuprimeDir(Inserta (L, P, E), P) ⇒ L
Modifica (Inicia (Lista ), P, E) ⇒ error
Modifica (Inserta (L, P, E), P, E1) ⇒Inserta (L,P,E1)
26. Especificación del TAD LISTA (Informal)
Inicia (Lista) → Lista
Efecto: Devuelve una lista vacía
Localiza (Lista, Elemento) → Posicion
Efecto: Devuelve la posición donde está el Elemento de la Lista. Si
no está, devuelve nulo.
Recupera (Lista, Posición) → Elemento
Efecto: Devuelve el Elemento que está en la Posición.
Excepción: Que la posición no sea un índice de la Lista.
27. Especificación del TAD LISTA (Informal)
Inserta (Lista, Posición, Elemento) → Lista
Efecto: Devuelve la Lista después de añadir el Elemento en la Posición.
Excepciones: Que la posición no sea un índice de la Lista, que la Lista
esté llena.
SuprimeDir (Lista, Posicion) → Lista
Efecto: Devuelve la lista sin el elemento de la Posición especificada.
Excepciones: Que la posición no sea un índice de la Lista, que la Lista
sea vacía
Modifica (Lista, Posicion, Elemento) → Lista
Efecto: Devuelve la lista con el nuevo Elemento en la Posición
especificada.
Excepciones: Que la Posición no sea un índice de la Lista, que la Lista
sea vacía.
28. Implementación del TAD LISTA
Para representar las listas y las correspondientes
implementaciones pueden seguirse dos alternativas:
Utilización de la estructura estática de arreglo para
almacenar los nodos de la lista.
Utilización de estructuras dinámicas, mediante
punteros y variables dinámicas.
30. Implementación del TAD LISTA (Est. Estáticas)
Unit LEstatic;
Interface
ConstMax= ...; {especifica tamaño máximo lista}
type
Info= ...; {tipo de campo de información lista}
Lista = record
Elementos: array[1..Max] of tInfo;
Ultimo: integer
end;
Posicion= 0 .. Max;
32. Implementación del TAD LISTA (Est. Estáticas)
Implementation
Procedure Inicia;
begin
L.Ultimo := 0
end;
Function Localiza;
var Q: Posicion; Lc: boolean;
begin
Q := 1;
Lc:= false;
while (Q <= L.Ultimo) and not Lc do
Begin
Lc:= L.Elementos[Q] = E;
if not Lc then Q := Q+1
end;
if Lc then
Localiza := Q
else
Localiza := 0
end;
33. Implementación del TAD LISTA (Est. Estáticas)
Implementation
procedureError (n: integer);
{procedimiento oculto que sólo se ve en el módulo}
Begin
case n of
1: writeln(‘Error: posición no existe’);
2: writeln(‘Error: lista llena. No se pueden añadir elementos);
3: writeln(‘Error: lista vacía. No se pueden suprimir o modificar elementos’);
end; {case}
readln {Pausa}
end;
Procedure Recupera;
begin
if(P > L.Ultimo) or (P < 1) then
Error (1)
else
E := L.Elementos [P]
end;
34. Implementación del TAD LISTA (Est. Estáticas)
Implementation
Procedure Inserta;
Var Q: Posicion;
Begin
if L.Ultimo = Max then
Error (2)
else if(P > L.Ultimo) or (P < 1) then
Error (1)
else
begin for Q := L.Ultimo downtop do
L.Elementos [Q + 1] := L.Elementos [Q] ;
L.Ultimo := L.Ultimo + 1;
L.Elementos [P] := E
end
end;
35. Implementación del TAD LISTA (Est. Estáticas)
Implementation
Procedure Suprime;
Var Q: Posicion;
begin
if L.Ultimo = 0 then
Error(3)
else if(P > L.Ultimo) or (P < 1) then Error(1) else
begin
L.Ultimo := L.Ultimo –1;
for Q := P to L.Ultimo do
L.Elementos[Q] := L.Elementos[Q+1]
end
end
end
end;
36. Implementación del TAD LISTA (Est. Estáticas)
Implementation
Procedure Modifica;
begin
if L.Ultimo = 0 then Error(3)
else
if(P > L.Ultimo) or (P < 1) then Error (1)
else
L.Elementos[P] := E
end;
end.
37. Implementación del TAD LISTA (Est. Dinámica)
Las desventajas de la implementación anterior
son:
a) Estructura rígida. Inserción y supresión
desplazando el resto del array.
b) No se utiliza de forma óptima la memoria. Hay que
reservar espacio en memoria para toda la estructura
durante toda la ejecución.
Estos inconvenientes pueden solucionarse
utilizando variables dinámicas
38. Implementación del TAD LISTA (Est. Dinámica)
Los elementos de la lista dinámica se definen
como datos de tipo registro con, al menos, dos
componentes:
1. Almacén del dato de la lista.
2. Puntero, que almacena la posición de memoria del
siguiente elemento de la lista o nilsi es el último elemento
Una lista dinámica simple se llama lista
enlazada. Cada uno de los elementos de una
lista dinámica se llaman nodos.
39. Implementación del TAD LISTA (Est. Dinámica)
El número de nodos puede variar rápidamente
en un proceso, aumentando por inserción de
nodos o disminuyendo por supresión de nodos.
Una lista enlazada es aquella en la que el orden
de las componentes se determina mediante un
campo enlace explícito en cada nodo.
40. Implementación del TAD LISTA (Est. Dinámica)
Las operaciones sobre una lista enlazada
permiten acceder a la misma mediante un
puntero externo, que contiene la dirección del
primer nodo de la lista.
41. Implementación del TAD LISTA (Est. Dinámica)
Desventajas
Cada vez que se quiera acceder a un nodo hay que
recorrer la lista, a través de los enlaces hasta alcanzar
su posición.
Cada nodo ocupa la memoria adicional del campo
enlace.
Al trabajar con estructuras dinámicas hay que manejar
dos clases diferentes de variables:
variables puntero (direccionan un dato) y variables de
referencia (son apuntadas).
42. Implementación del TAD LISTA (Est. Dinámica)
Unit LDinami;
Interface
Type
tInfo= ...; {tipo de campo de información lista}
Ptr= ^Nodo;
Nodo = record
Info: tInfo;
Sig: Ptr
end;
Procedure Inicia (var L: Ptr);
Function Localiza (L: Ptr; E: tInfo): Ptr;
Procedure Recupera (L: Ptr; P: Ptr; varE: tInfo);
Procedure Inserta (var L: Ptr; P: Ptr; E: tInfo);
Procedure SuprimeDir(var L: Ptr; P: Ptr);
Procedure Modifica (L: Ptr; P: Ptr; E: tInfo);
43. Implementación del TAD LISTA (Est. Dinámica)
Implementation
Procedure Inicia;
Begin
L := nil
end;
Function Localiza
begin
while (L^.Sig<>nil) and (L^.Info<>E) do
L := L^.Sig;
if L^.Info <> E then
Localiza := nil
else
Localiza := L
end;
44. Implementación del TAD LISTA (Est. Dinámica)
Implementation
Procedure Inserta; {Inserta en L un nodo con el Campo E, delante del nodo con Dirección P}
begin
new(A);
A^.Info:= E;
if(L = nil) then L := A
else
if P = L then
begin
A^.Sig:= P;
L := A;
end
else
begin
Anterior (P, L)^.Sig:= A;
A^.Sig:= P;
end
end;
45. Implementación del TAD LISTA (Est. Dinámica)
Implementation
Procedure SuprimeDir;
begin
if P = L {Primer nodo}
begin
L := L^.Sig;
dispose(P)
end else if Anterior(P,L) < > nil then
begin
{Enlaza anterior con siguiente}
Anterior(P, L)^.Sig:= P^.Sig
dispose(P)
end
end;
46. Implementación del TAD LISTA (Est. Dinámica)
Implementation
Procedure Modifica;
Begin
if P <> nil then
P^.info := E
end;
47. Ejercicios TAD LISTA (Est. Dinámica)
•EsVacia(L):Función que determina si L es vacía o no.
•Existe (E, L):Función que determina si el elemento E se encuentra en L o no.
•Inserprim(E, L):Inserta un nodo con la información E como primer nodo de la lista.
•Inserfin(E, L):Inserta un nodo con el campo E como último nodo de la lista L.
•Suprime (E, L):Elimina el nodo de la lista que contiene E
48. TAD Lista
Listas Doblemente Enlazadas
En las listas simplemente enlazadas hay un solo
sentido en el recorrido de la Lista. Puede resultar
En cada nodo de éste tipo de listas existe dos
enlaces, uno al siguiente nodo y otro al anterior.
Son listas simétricas
51. TAD PILA
Una pila es una estructura de datos en la que todas
las inserciones y eliminaciones de elementos se
realizan por un extremo denominado tope o cima de
la pila.
La implementación de una pila se puede realizar
mediante arreglos o con punteros.
El inconveniente de la realización de una pila
mediante arreglos es que su tamaño máximo se
debe especificar en tiempo de compilación.
54. TAD PILA – Estructura Estática - Ejercicios
1) Definir, de manera informal, las operaciones posibles
de un TAD pila
2) Implementar las operaciones de un TAD pila
utilizando una estructura estática.
56. TAD PILA – Aplicaciones
La Pila son utilizadas para solucionar una amplia
variedad de problemas.
Llamada a subprogramas
Recursión
Tratamiento de expresiones aritméticas
Ordenación
59. TAD Cola
Cola:
Secuencia de elementos de un cierto tipo, dispuestos
en una dimensión (Tipo Lineal de Datos)
Nuevos elementos se añaden al final de la estructura
– Operación Añadir
Los elementos salen o se eliminan de la cabeza de la
cola. Operación Eliminar
60. TAD Cola
Valor Especial: Cola Vacía
Estructura FIFO (First In, First Out) el orden de salida
debe corresponderse con el orden de entrada
Los elementos salen o se eliminan de la cabeza de la
cola. Operación Eliminar