Documente Academic
Documente Profesional
Documente Cultură
Estructura de Datos
Tipos Abstractos de Datos (TADS)
Profs.
Lorna
Figueroa
Mauricio
Solar
UTFSM 1 / 2008
M.
F.
L.F.M.
Hay problemas que no tienen definido un modelo claro, que slo se puede definir
experimentando.
MODELO
MATEMATICO
ALGORITMO
INFORMAL
TIPOS DE
DATOS
ABSTRACTOS
ESTRUCTURA
DE DATOS
PROGRAMA
EN EL
LENGUAJE
PROGRAMA
EN PSEUDOCODIGO
INSTANCIACIONES
Especificacin
Especificacin
del
delproblema
problema
EJECUCION
EN LA
MAQUINA
Programa
Programa
Algoritmo
Definicin
de TDAs
Abstraccin - Modelo
Abstraccin - Modelo
abstraccin
modelos
7
Concepto
En un lenguaje de programacin, el tipo de datos de una
variable (o constante o resultado de una funcin) est
determinado por:
conjunto de valores que dicha variable puede tomar
conjunto de operaciones que se pueden realizar con
variables del mencionado tipo (argumentos y/o resultado).
Ejemplo:
el tipo boolean tiene dos valores: {false, true},
es decir que una variable de este tipo podra tomar
slo uno de esos valores;
con respecto a las operaciones cuenta con la negacin,
la conjuncin y la disyuncin cuya representacin es:
not, and y or respectivamente.
10
Estructura de datos
Estructura de Datos
Representacin en el computador de los datos o
caractersticas relevantes de un objeto o de un
concepto.
crculo
C1
datos
centro
radio
color
11
12
Estructura de datos
13
Ejemplo:
int vector [10];
++
14
TAD
TAD == Representacin
Representacin
(estruct.
(estruct.de
dedatos)
datos)
y
la
un
la
Operaciones
Operaciones
(mtodos)
(mtodos)
vector
sumar
insertar
asignar
eliminar
15
buscar
16
Definici
Definicin
Formalmente
FormalmenteelelTDA
TDAes
esuna
unatripleta
tripleta(D,
(D,F,
F,A)
A)con
conlos
los siguientes
siguientes
componentes:
componentes:
Abstracciones de datos.
Un
Unconjunto
conjuntode
dedominios,
dominios,DD
Abstracciones funcionales.
Un
Unconjunto
conjuntode
defunciones
funcionessobre
sobrelos
losdominios,
dominios,FF
Un
Un conjunto
conjunto de
de axiomas
axiomas oo propiedades
propiedades definidas
definidas aa partir
partir de
de
las
lasfunciones
funcionesyyelementos
elementosde
delos
losdominios,
dominios,AA
17
Abstracciones funcionales
Surgen al plantearse de una manera abstracta las
operaciones significativas del problema.
Permiten dar a una aplicacin operaciones que no estn
definidas directamente en el lenguaje en el que se est
trabajando.
18
19
20
21
22
23
Elementos:
todos los caracteres alfabticos (letras maysculas y
minsculas), caracteres numricos y caracteres especiales.
24
Operaciones:
BORRA_INICIO
UTILIDAD: Sirve para eliminar el primer carcter de
una cadena.
ENTRADA: Cadena S sobre la que se desea eliminar
el primer carcter.
SALIDA: El carcter ms a la izquierda de la cadena
S y la cadena S modificada.
PRECONDICIN: La cantidad de caracteres es
mayor que cero.
POSTCONDICIN: La cadena S tiene todos los
caracteres, menos el primero.
Operaciones: (continuacin)
AGREGA_FINAL
UTILIDAD: Sirve para agregar un carcter al final
de una cadena.
ENTRADA: Cadena S y el carcter L, que se aadir
a la cadena S.
SALIDA: Cadena S modificada.
PRECONDICIN: La cantidad de caracteres en S es
menor que 80.
POSTCONDICIN: La cadena S tiene el carcter L
que queda al extremo derecho de la cadena.
25
26
Operaciones: (continuacin)
VACA
UTILIDAD: Sirve para verificar si una cadena esta
vaca o no.
ENTRADA: Cadena S que se verificar
SALIDA: VERDADERO si la cadena S no tiene
caracteres, FALSO en caso contrario.
PRECONDICIN : Ninguna
POSTCONDICIN: Ninguna (pues la cadena S no
se modifica).
27
Operaciones: (continuacin)
LLENA
UTILIDAD: Sirve para verificar si una cadena esta
llena o no.
ENTRADA: cadena S que ser verificada.
SALIDA: VERDADERO si la cadena S contiene ya
80 caracteres, FALSO en caso contrario.
PRECONDICIN : Ninguna
POSTCONDICIN: Ninguna (pues la cadena S no se
modifica).
28
TADs - Representacin
Operaciones: (continuacin)
INVIERTE
UTILIDAD: Sirve para invertir el orden de los
caracteres en una cadena.
ENTRADA: Cadena S a la que se desea invertir el
orden de los caracteres.
SALIDA: Cadena S modificada.
PRECONDICIN: Ninguna
POSTCONDICIN: La secuencia de caracteres en la
cadena S se invierte, de forma que el primer carcter
29
30
el TDA NumeroComplejo
TADs - Implementacin
Es la forma especfica en que se expresan las operaciones.
Aqu se considerar la estructura de datos ms conveniente.
Est dado por un grupo de instrucciones que sern ejecutadas
por el computador, y se escribe en un lenguaje de
programacin.
Cada implementacin corresponde a alguna especificacin.
Normalmente la implementacin del tipo se realiza en un
mdulo separado que ser enlazado al programa principal.
Los algoritmos ms la representacin da como resultado una
implementacin del TAD.
31
TADs - Ejemplo
el TDA NumeroRacional
Definicin del tipo
Numero racional: Conjunto de pares de elementos (a,b) de
tipo entero, con b 0.
Operaciones:
CrearRacional: a, b = (a,b)
Divisin: (a,b) / (c,d) = (a*d , b*c)
Numerador: (a,b) = a
Denominador: (a,b) = b
ValorReal: (a,b) = a/b
Potencia: (a,b)^c = (a^c , b^c)
33
TADs - Ejemplo
34
TADs - Ejemplo
Operaciones:
Archivo_Nuevo (Archivo): Crea un archivo nuevo sin
introducir ningn registro (nmero de registros es 0).
Insertar (Archivo, Registro): Inserta un registro despus del
registro actual y el nuevo pasa a ser el actual.
Reemplazar (Archivo, Registro): Cambia el registro actual por
el nuevo.
Eliminar (Archivo): Borra el registro actual y una vez
eliminado el actual pasa a ser el siguiente.
Avanzar (Archivo): El registro siguiente pasa a ser el actual.
Retroceder (Archivo): El registro anterior pasa a ser el actual.
35
Archivo_Nuevo (Archivo) {
Longitud = 0;
Reg_Actual = 0;
}
36
TADs - Ejemplo
TADs - Ejemplo
Retroceder (Archivo) {
if RegActual != 0
RegActual --;
}
37
38
TADs - Ejemplo
TADs - Ejemplo
Eliminar (Archivo) {
if RegActual != 0
for( j =Actual; j <= Longitud-1; j++)
Archivo[j] = Archivo[j+1];
if RegActual >Longitud
RegActual --;
}
Avanzar (Archivo) {
if RegActual != Longitud
RegActual ++;
}
39
40
10
TADs - Ejemplo
TADs - Ejemplo
Operacin
Operacin
r1
r1==Crear_Racional
Crear_Racional (2,
(2, 3);
3);
r2
r2==Crear_Racional
Crear_Racional(5,
(5, 7);
7);
//// sses
esla
lasuma
suma de
der1
r1yyr2
r2
ss==Crear_Racional
Crear_Racional (( Numerador(
Numerador( r1
r1 )) ** Denominador
Denominador (( r2
r2 ))
++Numerador
Numerador((r2
r2))**Denominador
Denominador(( r1
r1 ),),
Denominador
Denominador((r1
r1 ))**Denominador
Denominador (( r2
r2 )) ););
printf(
printf(%d
%d // %d
%d,,Numerador
Numerador((ss),),Denominador
Denominador(( ss))))
Reemplazar (Archivo,RegNuevo) {
if RegActual != 0
Archivo[RegActual] = RegNuevo;
}
41
42
Implementaci
Implementacin
ESPECIFICACIN
#define
#defineMAX
MAX100
100
typedef
typedefstruct
structRacional
Racional{{
int
intnum,
num,den;
den;
};
};
Racional
Racionalinfo[MAX];
info[MAX];//// arreglo
arreglopara
paraalmacenar
almacenarlos
losracionales
racionales
int
//// para
intultimo
ultimo==-1;
-1;
paracontrolar
controlareleltamao
tamaodel
delarreglo
arreglo
Racional
RacionalCrear_Racional
Crear_Racional(Entero
(Enteron,d)
n,d){{
Necesita:
dos
Necesita:
dosvalores
valoresenteros,
enteros,nnyyd.
d.
Produce:
elelnmero
Produce:
nmeroracional
racionalnn//d.
d.
Error:
si
d
es
cero.
Error:
si d es cero.
}}
Entero
EnteroNumerador
Numerador(Racional
(Racionalrr)) {{
Necesita:
un
Necesita:
unracional
racionalr.r.
Produce:
elelnumerador
Produce:
numeradorde
der.r.
}}
Un racional
Entero
EnteroDenominador
Denominador(Racional
(Racionalrr)) {{
Necesita:
un
Necesita:
unracional
racionalr.r.
Produce:
eleldenominador
Produce:
denominadorde
der.r.
}}
info
43
num
17
den
ltimo
MAX
44
11
Implementaci
Implementacin
Implementaci
Implementacin
int
intCrear_Racional
Crear_Racional(int
(intn,
n,int
intd,d,int
inti)i){{
ifif(d
(d==
==0)
0){{
printf("\n
printf("\nError:Division
Error:Divisionpor
porcero");
cero");
getch();
getch();
exit(0);
exit(0);
}}
else
else{{
info[i].num
info[i].num==n;
n;
info[i].den
info[i].den==d;
d;
ultimo++;
ultimo++;
}}
return
returnultimo;
ultimo;
}}
int
intNumerador
Numerador(int
(intr)r){{
return
returninfo[r].num;
info[r].num;
}}
int
intDenominador
Denominador(int
(intr)r){{
return
returninfo[r].den;
info[r].den;
}}
45
Implementaci
Implementacin
46
Implementaci
Implementacin
void
voidImprime_Racional(void)
Imprime_Racional(void){{
int
intnum;
num;
printf("\nIndique
printf("\nIndiquelalaposicion
posiciondel
delracional
racionalque
quequiere
quierever:
ver:");
");
scanf("%d",
scanf("%d",&num);
&num);
if(
if(num
num>=
>=ultimo)
ultimo)
printf(\n
printf(\nError,
Error,fuera
fuerade
derango);
rango);
else
else
printf(
printf("\nRacional
"\nRacionalingresado
ingresadoes
es::%d/%d
%d/%d en
enlalaposicion
posicion%d",
%d",
Numerador(num),
Numerador(num),Denominador(num),
Denominador(num),num);
num);getch();
getch();
}}
47
#include
#include<stdio.h>
<stdio.h>
#include
#include<stdlib.h>
<stdlib.h>
#include
#include<conio.h>
<conio.h>
#define
#defineMAX
MAX100
100
typedef
typedefstruct
structRacional
Racional{{
int
intnum,
num,den;
den;
};
};
Racional
Racionalinfo[MAX];
info[MAX]; //// arreglo
arreglodonde
dondese
sealmacenaran
almacenaranlos
los
////numeros
numerosracionales
racionales
int
intultimo
ultimo==-1;
-1;
48
12
Implementaci
Implementacin
int
intmain()
main(){{
int
intnume,
nume,deno,
deno,pos,
pos,i,i,n;
n;
printf("\n
printf("\nCuantos
Cuantosdatos?
datos?");
"); scanf("%d",&n);
scanf("%d",&n);
ifif((nn>=
>=ultimo)
ultimo){{
printf(\n
printf(\nError,
Error,fuera
fuerade
derango);
rango);
return
return1;
1;
}}
else
else
for(i
for(i==0;
0;ii<<n;
n;i++)
i++){{
printf("\nNumerador:
printf("\nNumerador:");
"); scanf("%d",
scanf("%d",&nume);
&nume);
printf("\nDenominador:
printf("\nDenominador:");
"); scanf("%d",
scanf("%d",&deno);
&deno);
pos
pos==Crear_Racional(nume,
Crear_Racional(nume,deno,
deno,i);
i);
}}
Imprime_Racional();
Imprime_Racional();
return
return0;
0;
}}
49
13