Вы находитесь на странице: 1из 11

CAPITULO 4

TIPOS DE ABSTRACTOS DE DATOS (TAD`S)


Todo tipo de datos simples se pueden definir como un conjunto de valores y un
conjunto de operaciones sobre tales valores. Este conjunto y estas operaciones forman una
estructura matemtica que se implementa en un lenguaje y en el computador como un tipo.
Ejemplo:
En C, int {-!!"! ................!!"#
$ $
- -
% %
& & y '
Esta misma concepci(n se lleva a los tipos estructurados, los cuales se que pueden
definir en base a los tipos simples. )e esta manera abstraemos la definici(n matemtica de
tipo a estructuras mas complejas.
Ejemplo:
*ueremos definir un nuevo tipo llamado C+,-.E/+0, que contenga los valores de
los n1meros complejos 2 $ 3 i con 2, 3 4 5. .as operaciones ser6an: $ 7suma8, -
7diferencia8, % 7producto8, & 7divisi(n8.
En general, pocos lenguajes de programaci(n proveen 9erramientas para construir
T:);0. 0on los lenguajes orientados a objetos. En lenguajes como C, el dise<o de
programas a trav=s de T:)s es una t=cnica de programaci(n.
3! Caracter"sticas #e los TAD$S
Es la manera de dise<ar e implementar el ocultamiento de informaci(n.
>os permite concentrarnos en los objetos del problema y no en los procesos.
.os objetos pueden ser dise<ados independientes del problema.
El problema se resuelve con la interacci(n de los diferentes T:)s que lo componen.
>os olvidamos, al dise<ar, de la eficiencia del espacio o del tiempo. Esto son
aspectos se consideran en la implementaci(n.
?n T:) consta de dos partes: definici(n de conjunto de valores, la definici(n de los
operadores.
-ara dise<ar e implementar los T:)s seguiremos las siguiente metodolog6a:
@. ConceptualiAaci(n del T:), en este paso se intenta dar un modelo de los
componentes 7objetos8 del T:).
B. ConceptualiAaci(n de las operaciones del T:). 0e define cada una de la
operaciones que su usarn para manipular el T:) a trav=s de notaci(n
funcional, as6 como, las pre y post condiciones. :qu6 se destacan cules son
las operaciones primitivas y cules operaciones se implementan en base a
las primitivas.
@
". Cmplementaci(n de la estructura de datos. 0e define los typedef
correspondientes al nuevo T:)
D. Cmplementaci(n de las operaciones
Ejemplo @: )ise<o del T:) 5:CC+>:.
@. Concept%ali&aci'n #el TAD
5:CC+>:.: 2 donde 2,3 4 5 7reales8 y 3 E F
3
B. Concept%ali&aci'n #e las operaciones.
Geremos primero operaciones que no son primitivas:
A#ici'n: 2@ $ 2B H 2@%3B $ 2B%3@
3@ 3B 3@ % 3B

(%ltiplicaci'n: 2@ % 2B H 2@ % 2B
3@ 3B 3@ % 3B
I)%al#a# : 2@ H 2B H 72@ % 3B H 2B % 3@8
3@ 3B
Estas operaciones se conceptualiAan con la notaci(n funcional:
R_Adicin: RACIONAL x RACIONAL RACIONAL
/* PRE: Dados dos racionales
POST: Devuelve la sua de los dos racionales */
R_!ul"i#licacin: RACIONAL x RACIONAL RACIONAL
/* PRE: Dados dos racionales
POST: Devuelve la ul"i#licacin de dos racionales */
R_I$ualdad: RACIONAL x RACIONAL %ool
/* PRE: Dados dos racionales
POST: Dice si dos racionales son i$uales */
:9ora 9ablaremos de las primitivas del T:).
Todo T:) contiene D clases de primitivas: un constructor, un destructor, los
modificadores y los observadores. Geamos las primitivas del T:) 5:CC+>:..
a8 constr%ctor: permite crear un objeto del T:). )ebemos pensar que
informaci(n es necesaria al momento de crear un objeto. En el caso del
racional, se necesitan el numerador y el denominador.
R_Crear: in" x in" RACIONAL
/* PRE: Dados dos en"eros x&' con '(
POST: Crea un racional con nuerador x& denoinador ' */
b8 #estr%ctor: permite liberar el espacio de memoria ocupado por un objeto del
T:). En este caso no 9ay un valor de retorno lo cual se indica usando la
palabra void.
B
R_Des"ruir: RACIONAL void
/* PRE: Dado un racional
POST: Li%era el es#acio ocu#ado #or el racional */
c8 o*serva#ores: permiten visualiAar la informaci(n interna del T:). 0e necesita
un observador para cada campo del objeto que se necesita accesar. En el caso
del racional, se necesitan visualiAar tanto el numerador y como el denominador.
R_Nu: RACIONAL in"
/* PRE: Dado un racional
POST: Devuelve el nuerador de dic)o racional */
R_Den: RACIONAL in"
/* PRE: Dado un racional
POST: Devuelve el denoinador de dic)o racional */
d8 +o#i,ica#ores: permiten modificar la informaci(n interna del T:). 0e necesita
un modificador para cada campo del objeto que se necesite alterar. En el caso
del racional, se necesita poder modificar tanto el numerador y como el
denominador.
R_Asi$narNu: RACIONAL x in" RACIONAL
/* PRE: Dado un racional ' un en"ero *
POST: Devuelve el racional odi+icado con * coo
nuerador */
R_Asi$narDen: RACIONAL x in" RACIONAL
/* PRE: Dado un racional ' un en"ero *(
POST: Devuelve el racional odi+icado con * coo
denoinador */
". I+ple+entaci'n #e la estr%ct%ra #el TAD.
.a implementaci(n del T:) puede ser en cualquier lenguaje y con cualquier estructura
de datos que no modifique la especificaci(n.
+bservemos que en la definici(n de las operaciones del T:) 5:CC+>:., varias de
ellas devuelven un racional. En el lenguaje C, no es posible devolver una estructura por lo
cual usaremos un apuntador a la estructura para poder retornar dic9o apuntador.
.a implementaci(n del T:) 5:CC+>:. en C ser6a:
"'#ede+ s"ruc" s_rac ,
in" nu-
in" den-
. STR/CTRAC-
"'#ede+ STR/CTRAC *RACIONAL-
"
>ote que se declara primero la estructura 70T5?CT5:C8 y luego el apuntador a dic9a
estructura 75:CC+>:.8 el cual es la implementaci(n del T:).
". I+ple+entaci'n #e las operaciones #el TAD.
.as operaciones que no son primitivas se implementan en base a las primitivas. -or
esta raA(n escribiremos primero los prototipos de las primitivas, luego, las operaciones
adici(n, multiplicaci(n e igualdad implementadas en base a las primitivas y finalmente, la
implementaci(n de las primitivas.
.os prototipos de las operaciones primitivas ser6an:
RACIONAL R_Crear 0in" x& in" '1-
/* PRE: '(
POST: R_Crear 2 x
' */
void R_Des"ruir 0RACIONAL R1-
/* PRE: nin$una
POST: Li%era el es#acio ocu#ado #or el racional */
in" R_Nu0RACIONAL R1
/* PRE: nin$una
POST: Devuelve el nuerador del racional dado */
in" R_Den0RACIONAL R1
/* PRE: nin$una
POST: Devuelve el denoinador del racional dado */
RACIONAL R_Asi$narNu0RACIONAL R& in" *1
/* PRE: nin$una
POST: Devuelve el racional odi+icado con * coo
nuerador */
RACIONAL R_Asi$narDen0RACIONAL R& in" *1
/* PRE: *(
POST: Devuelve el racional odi+icado con * coo
denoinador */
.os prototipos se colocan en el arc9ivo 5acional.9 junto con los typedef de la
estructura.
:9ora implementemos las operaciones adici(n, multiplicaci(n e igualdad usando estos
prototipos.
D
RACIONAL R_adicin 0 RACIONAL R3& RACIONAL R41
/* PRE: R3 2 53/63 ' R4254/64
POST: R_adicin 2 2@ $ 2B H 2@%3B $ 2B%3@
3@ 3B 3@ % 3B
*/
,
re"urn0 R_Crear0R_Nu0R31*R_Den0R417 R_Nu0R41*R_Den0R31&
R_Den0R31*R_Den0R41 1-
.
RACIONAL R_ul"i#licacin 0 RACIONAL R3& RACIONAL R41
/* PRE: R3 2 53/63 ' R4254/64
POST: R_adicin 2 2@ % 2B H 2@ % 2B
3@ 3B 3@ % 3B
*/
,
re"urn0 R_Crear0R_Nu0R31*R_Nu0R41&
R_Den0R31*R_Den0R41 1-
.
%ool R_i$ualdad0 RACIONAL R3& RACIONAL R41
/* PRE: R3 2 53/63 ' R4254/64
POST: R_i$ualdad272@%3B H 2B%3@ 8
*/
,
re"urn0 R_Nu0R31*R_Den0R41 22 R_Nu0R41*R_Den0R311-&
.
.a implementaci(n de estas operaciones queda transparente de la estructura de datos
del T:). .a estructura s(lo es accesible por las primitivas.
Geamos la implementaci(n de las primitivas:
RACIONAL R_Crear 0in" x& in" '1
/* PRE: '(
POST: R_Crear 2 x
' */
,
RACIONAL R-
i+ 00R20RACIONAL1alloc0si*eo+0STR/CTRAC11182N/LL1.
,
R9:nu 2 x-
R9:den 2 '-
.
re"urn0R1-
.
!
void R_Des"ruir 0RACIONAL R1
/* PRE: nin$una
POST: Li%era el es#acio ocu#ado #or el racional */
,
+ree0R1-
.
in" R_Nu0RACIONAL R1
/* PRE: nin$una
POST: Devuelve el nuerador del racional dado */
,
re"urn0R9:nu1-
.
in" R_Den0RACIONAL R1
/* PRE: nin$una
POST: Devuelve el denoinador del racional dado */
,
re"urn0R9:den1-
.
RACIONAL R_Asi$narNu0RACIONAL R& in" *1
/* PRE: nin$una
POST: Devuelve el racional odi+icado con * coo
nuerador */
,
R9:nu 2 *-
re"urn0R1-
.
RACIONAL R_Asi$narDen0RACIONAL R& in" *1
/* PRE: *(
POST: Devuelve el racional odi+icado con * coo
denoinador */
,
R9:den 2 *-
re"urn0R1-
.
>ote que las primitivas accesan los campos del T:) a trav=s del apuntador, por eso
es necesario asignar memoria con el constructor y liberarla en el destructor.
Ejemplo B: )ise<o del T:) C+>/?>T+
@. Concept%ali&aci'n #el TAD
C+>/?>T+ : {e
@
, e
B
... , e
n
# donde e
i
int y n es la cardinalidad del conjunto

B. Concept%ali&aci'n #e las operaciones.


a1 constr%ctor:
C_Crear: void CON;/NTO
/* PRE: nin$una
POST: Crea un con<un"o vac=o */
%1 #estr%ctor:
C_Des"ruir: CON;/NTO void
/* PRE: Dado un con<un"o
POST: Li%era el es#acio ocu#ado #or el con<un"o */
c1 o*serva#ores:
C_>acio: CON;/NTO %ool
/* PRE: Dado un con<un"o
POST: Dice si el con<un"o es vac=o */
C_Per"enece: CON;/NTO x in" %ool
/* PRE: Dado un con<un"o ' un eleen"o
POST: Dice si el eleen"o es"? en el con<un"o */
C_Eleen"o: CON;/NTO x in" in"
/* PRE: Dado un con<un"o no vac=o ' un en"ero i
POST: Devuelve el eleen"o i del con<un"o */
C_Cardinalidad: CON;/NTO in"
/* PRE: Dado un con<un"o
POST: Devuelve la cardinalidad del con<un"o */
d1 +o#i,ica#ores:
C_Inser"Ele: CON;/NTO x in" CON;/NTO
/* PRE: Dado un con<un"o ' un eleen"o
POST: Devuelve el con<un"o con el eleen"o inser"ado
Si 'a exis"e no lo inser"a */
C_EliEle: CON;/NTO x in" CON;/NTO
/* PRE: Dado un con<un"o ' un eleen"o
POST: Devuelve el con<un"o sin el eleen"o dado@
Si el eleen"o no #er"enece al con<un"o no )ace
nada */
e1 otras operaciones:
C_/nin: CON;/NTO x CON;/NTO CON;/NTO
/* PRE: Dados dos con<un"os
I
POST: Devuelve la unin de ellos */
C_In"erseccin: CON;/NTO x CON;/NTO CON;/NTO
/* PRE: Dados dos con<un"os
POST: Devuelve la in"erseccin de ellos */
C_I$uales: CON;/NTO x CON;/NTO %ool
/* PRE: Dados dos con<un"os
POST: Dice si los dos con<un"os son i$uales */
". I+ple+entaci'n #e la estr%ct%ra #el TAD.
Ade+ine !A5 3((
"'#ede+ s"ruc" s_c<"o ,
in" card-
in" eleen"osB!A5C-
. STR/CTC;TO-
"'#ede+ STR/CTC;TO *CON;/NTO-
". I+ple+entaci'n #e las operaciones #el TAD.
)e las primitivas:
CON;/NTO C_Crear 01
/* PRE: nin$una
POST: C_Crear 2 ,. con<un"o vacion */
,
CON;/NTO C-
i+ 00C20CON;/NTO1alloc0si*eo+0STR/CTC;TO11182N/LL1.
,
C9:card 2 (-
+or 0in" i2(- iD!A5- i771
, C9:eleen"osBiC 2 (- .
.
re"urn0C1-
.
void C_Des"ruir 0CON;/NTO C1
/* PRE: nin$una
POST: Li%era el es#acio ocu#ado #or el con<un"o */
,
+ree0C1-
.
J
%ool C_>acio0CON;/NTO C1
/* PRE: Con<un"o Creado
POST: Dice si el con<un"o es"? vac=o */
,
re"urn0C9:card 22 (1-
.
%ool C_Per"enece0CON;/NTO C& in" e1
/* PRE: Con<un"o Creado
POST: Dice si e #er"enece a C*/
,
+or 0in" i2(- iDC9:card- i771
,
i+ 0C9:eleen"osBiC 22 e1
re"urn0TR/E1-
.
re"urn0EALSE1-
.
in" C_Eleen"o0CON;/NTO C&in" i1
/* PRE: Con<un"o Creado ' no vac=o& (D2iDC_Cardinalidad0C1
POST: Devuelve el eleen"o i del con<un"o*/
,
re"urn0C9:eleen"oBiC11-
.
in" C_Cardinalidad0CON;/NTO C1
/* PRE: Con<un"o Creado
POST: Devuelve la cardinalidad del con<un"o dado */
,
re"urn0C9:card1-
.
CON;/NTO C_Inser"Ele0CON;/NTO C& in" e1
/* PRE: Con<un"o creado
POST: Devuelve el con<un"o con el eleen"o e inser"ado*/
,
i+ 08C_Per"enece0C&e11
,
C9:eleen"osBC9:cardC 2 e-
C9:card77-
.
re"urn0C1-
.
K
CON;/NTO C_EliEle0CON;/NTO C& in" e1
/* PRE: Con<un"o creado
POST: Devuelve el con<un"o eliinando el eleen"o e
Si no exis"e no )ace nada*/
,
in" i2(-
F)ile 0iDC9:Card1
,
i+ 0C9:eleen"osBiC 22 e1
,
C9:card99- /* Encon"re el eleen"o decreen"o
la cardinalidad */
%reaG-
.
i77-
.
/* Eliina el eleen"o oviendo "odos a la #osicin
an"erior */
F)ile 0iDC9:Card1
C9:eleen"oBiC 2 C9:eleen"oBi73C-
re"urn0C1-
.
CON;/NTO C_unin0 CON;/NTO C3& CON;/NTO C41
/* PRE: Dados dos con<un"os creados
POST: C_unin 2 C3 C4 & C3&C4 Huedan des"ruidos */
,
CON;/NTO /-
in" e-
/2 C_Crear01-
F)ile 08C_>acio0C311
,
e 2 C_eleen"o0C31-
/ 2 C_Inser"Ele0/&e1-
C3 2 C_EliEle0C3&e1-
.
F)ile 08C_>acio0C411
,
e 2 C_eleen"o0C41-
/ 2 C_Inser"Ele0/&e1-
C4 2 C_EliEle0C4&e1-
.
re"urn0/1-
.
@F
CON;/NTO C_in"erseccin0CON;/NTO C3& CON;/NTO C41
/* PRE: Dados dos con<un"os creados
POST: C_in"erseccin 2 C3 C4 & C3 Hueda des"ruido */
,
CON;/NTO I-
in" e-
I2 C_Crear01-
F)ile 08C_>acio0C311
,
e 2 C_eleen"o0C31-
i+ 0C_Per"enece 0C4&e11
I 2 C_Inser"Ele0I&e1-
C3 2 C_EliEle0C3&e1-
.
re"urn0I1-
.
%ool C_I$uales0CON;/NTO C3& CON;/NTO C41
/* PRE: Dados dos con<un"os creados
POST: C_I$uales20C3 HCB 8, C@ queda destruido
*/
,
i+ 0C39:card 82 C49:card1
re"urn0EALSE1-

F)ile 08C_>acio0C311
,
e 2 C_eleen"o0C31-
i+ 08C_Per"enece0C4&e11
re"urn0EALSE1-
C3 2 C_EliEle0C3&e1-
.
re"urn0TR/E1-&
.
@@

Вам также может понравиться