Vous êtes sur la page 1sur 25

Estructura de Datos

ndice


Introduccin






Mauricio Solar





2008

Objetivos
Estructura de datos. Definicin
Datos e informacin
Bit y byte
Campos y registros
Archivos
Arreglos o arrays
Abstraccin
Tipos de datos abstractos (TDA)

Objetivos





Estructura de datos. Definicin

Diferenciar entre bit, byte, campos,


registros y archivos.
Definir estructuras de datos.
Diferenciar declaracin, inicializacin y
acceso a arreglos.
Definir y ejemplificar Tipos de Datos
Abstractos (TDA).

Uno de los aspectos mas importantes de la


programacin es la creacin de nuevos
tipos de datos que sean apropiados para
resolver problemas especficos.
La estructura de datos es una
construccin que se puede definir dentro
de un lenguaje de programacin para
almacenar colecciones de datos (Luis Joyanes)

Estructura de datos


Datos e Informacin

Todos los algoritmos manipulan datos y stos deben


estar adecuadamente relacionados (estructurados)
de manera especfica. Ello nos lleva al estudio de una
disciplina dentro de la computacin que es la
Estructura de Datos.
Datos
La estructura es la relacin existente entre los
elementos de datos. La parte ms delicada de la
programacin, es la eficiente estructuracin de datos,
ya que esto conlleva a un inteligente nivel de costos
en cuanto a espacios de memoria, de
almacenamiento, tiempo y ejecucin del trabajo.

Datos: son cifras o elementos no


significativos como tales sino hasta que
son procesados y convertidos a una
forma til llamada informacin.
Son la materia prima para obtener
informacin.
Informacin: es el resultado del
proceso de los datos.

Bit y Byte


Campos y registros


Bit: la menor unidad de informacin con


que se pueden representar los datos.
Byte: la unidad ms comn de
almacenamiento en Computacin. Est
compuesto de 8 bits.

Campo: la unidad lgica ms pequea


que se encuentra en el nivel ms bajo
de la jerarqua de datos.
Campos son los componentes en que
se divide un registro.
Registros: son datos o campos
lgicamente relacionados que pueden
ser tratados como una unidad.

Ejemplo

Archivos


Archivo: una coleccin de registros


relacionados entre s.
Es una estructura de datos que consiste
en un conjunto de informaciones
estructuradas en unidades de acceso
denominadas registros.
Llamado tambin tablas en el mundo
de las bases de datos.

Direccin

Sueldo

Rec1

Cdula

555555 Juan

Nombre Apellido
Prez

San Jos y Espaa

982000

Rec2

666666 Alberto

Longo

Av Del Agrnomo 156 1025400

10

Arreglos o arrays


Arrays


Un arreglo o conjunto de datos ordenados est


formado por un nmero fijo de elementos
contiguos y de un mismo tipo. Al tipo se le
llama tipo base del arreglo. Los datos
individuales se llaman elementos del arreglo.
Para definir un tipo estructurado arreglo, se
debe especificar el tipo base y el nmero de
elementos.

Declaracin


Tipo_dato nombre_array[ ]


nombre_array = tipo_dato [tamao];




Ej: meses = cadena [12]

Acceso


Nombre_array[ posicin]


11

Ej: Cadena meses[ ]

Inicializacin

Ej: meses[1] = Enero, meses[4] = Abril


12

Abstraccin


Tipos de datos abstractos

Es el conocimiento que se tiene de una cosa


prescindiendo de las dems que estn con ella.
Es la capacidad para encapsular y aislar la
informacin del diseo y ejecucin.
La abstraccin localiza y oculta los detalles de un
modelo o diseo para generar y manipular objetos.
Conocemos un objeto vindolo, sabemos qu es sin
necesidad de ver su interior, su implementacin o
su forma de construccin.

TDA: es un tipo de dato definido por el programador. Est


compuesto de datos (estructura de datos propia) y un
conjunto de operaciones sobre estos datos.

Los TDA mezclan estructuras de datos junto a una serie de


operaciones de manipulacin. Incluyen una interfaz pblica,
que es lo que ver el usuario, y una implementacin
(algoritmos de operaciones sobre las estructuras de datos y
su representacin en un lenguaje de programacin), que el
usuario no tiene necesariamente que conocer para manipular
correctamente los tipos de datos abstractos.

13

14

TDA

Ejemplo de TDA

Tipo de Dato Abstracto


Datos de la estructura
Operaciones

TAD Punto



Interfaz

Define datos (propiedades) enteros x e y


Define operaciones (mtodos) asignar_valor_a_x,
asignar_valor_a_y, mostrar_valor_x, mostrar_valor_y que
actuan sobre los datos.

TAD Punto

Un tipo de datos abstracto (TDA) es


caracterizado por las siguientes propiedades:

Datos x, y

1. Define un tipo de datos.


2. Define un conjunto de operaciones que se conoce como interfaz.
3. Las operaciones de la interfaz son la nica forma de acceder a

Operaciones:
asignar_valores_a_x_e_y
mostrar_valor_x, mostrar_valor_y,
convertir_a_cadena,
dibujar_punto

los datos del TDA.

15

Operaciones
pblicas o
Interfaz
16

Tipos de Datos
Un Tipo de Dato es un conjunto de valores y
operaciones asociadas
Proporcionados por los Lenguajes (C, C++, Pascal, etc)
para clasificar diversas clases de datos. Ayudan en:
 Prevencin y deteccin de errores
 Comprensin y Organizacin de las ideas acerca de los
datos
 Identificacin y descripcin de las propiedades nicas de
ciertos datos.


Ej: 6+5+Aire: Error, se suman tipos disimiles.

Tipos de datos Primitivos








Son los mas simples, ATOMICOS.


No se construyen desde otros.
No son descomponibles.
Ej: Entero, flotante, real, carcter, lgico.
Tipo Entero:



Tipos Compuestos y Agregados




Valores: 4, 3, 2, 1, 0, 1, 2, 3, 4
Operaciones: *, +, , /, ++, .

Una Estructura de datos es una Organizacin o


Agregacin de datos Compuestos y Atmicos



Seleccin de una Estructura

Se crean en tiempo de diseo.


Se pueden anidar entre ellas.
Requieren espacio en memoria para almacenarlas.

Anlisis de los Objetivos y Determinacin de


las Restricciones.
Determinar las Operaciones Bsicas y sus
restricciones
Seleccionar/Disear una estructura de
datos.
Implementar la solucin.

1.

2.

Objetivo: resolver problemas eficientemente.




Eficiente: resuelve el problema dentro de las restricciones

3.

de recursos.


Costo: cantidad de recursos que la solucin consume.

4.

Abstraccin y TADs



El TAD es una Abstraccin de la Realidad.


La Abstraccin es la supresin de detalles irrelevantes mientras se
enfatiza los significativos.


Partes de un TAD


Especificacin: Describe qu hace el TAD,


independiente de cmo lo hace:


Ciencia de la computacin - Ciencia de la Abstraccin

El TAD define el tipo de dato a utilizar y sus operaciones en


trminos de Entrada/Salida.


Encapsula: oculta dentro de si los detalles de la Implementacin.


Operaciones significativas para manejar los datos del TAD


Tipos agregados bsicos: Arrays, Cadenas y


registros.

Sus formas de representacin interna varan


de Sistema a Sistema.

Ej: Nmero de Telfono: CodPais, CodArea,


NumeroLocal.

Los TIPOS AGREGADOS son colecciones de


datos del mismo tipo.


La Necesidad de las Estructuras de Datos




Los TIPOS COMPUESTOS se pueden


descomponer en Subcampos.

Cada operacin pueden ser una o mas funciones.

Ayuda a los programadores a realizar Software confiable y


reutilizable.

Sintaxis: define los formatos de las operaciones y el tipo de


resultados, su nombre, sus parmetros.
Semntica: define para cada operacin cual es su posible
salida.

Implementacin


Representacin: especifica como se almacena el TAD en


memoria
Algoritmo: especifica los pasos dentro de cada operacin
del TAD

Algoritmos y Programas


Algoritmo: conjunto de instrucciones ordenadas, que resuelven un


problema especifico.










Exactitud y Correccin.
Especificar claramente sus entradas y cada instruccin sin ambigedad.
Etapas bien definidas y finitas.
Descripcin de resultado o efecto.
Fcil de entender, codificar y depurar.
Eficiente uso del computador.

1.

2.

Debe ser Verificable y Eficiente

No se puede realizar un anlisis del nmero de Instrucciones de


mquina pues son dependientes de las tecnologas (RISC, CISC, VLIS).

Bucles Lineales:





Se usa el Orden de Magnitud de la Eficiencia del


Tiempo y de los Recursos.
Se lo complementa con la Tasa de crecimiento del
programa para evaluar su comportamiento a Futuro.

i=1
Mientras i<n
Cdigo
i*=2
Fin M

Bucles Anidados: para y bucles de n iteraciones c/u

Recursividad: se invoca K veces a si mismo con un lote inicial n

n la cantidad de elementos a ser procesados

Una buena estimacin de la Eficiencia debe ser


independiente de aspectos de implementacin
(la plataforma y el Lenguaje con que se
codificar) pero debe reflejar sus diferencias:

E = F(n)= Log2 n
E = F(n)= Loga n

Medicin de la Eficiencia


E = F(n)= n

i=0
Mientras i<n
Cdigo
i++
Fin M

Bucles logartmicos: avance i*=a

Eficiencia = F(n)
siendo

Comienza con la Hiptesis de que las Precondiciones se


cumplen antes de empezar la ejecucin.
Termina con una PostCondicin o condiciones que deben
cumplir la Salida.

Eficiencia (Ordenes de Magnitud)

La Eficiencia se obtiene del Anlisis de Algoritmos:



Dimensin Temporal: Medida del tiempo empleado.

Dimensin Espacial: Medida de los recursos invertidos.
Encontrar Algoritmos eficientes puede definir si Existe o no una
Solucin al Problema.
El Anlisis de Algoritmos se centra en el estudio de los Bucles, del
cual en ltima instancia, dependern las instrucciones a ser
ejecutadas.


Prueba de Escritorio

Eficiencia


Es una prueba Formal de la exactitud de los resultados


obtenidos:

Programas: Es la representacin concreta de un Algoritmo (su


traduccin) codificado en un lenguaje de programacin.


Un Algoritmo es Correcto: si se obtiene la respuesta


para la cual fue creado.

Es una representacin identada, en un idioma base.


No puede ser ejecutado por una computadora.

Un buen algoritmo debe tener las propiedades de:

Es la evaluacin de la solucin y su potencial uso como


herramienta.

No son nicos, por lo que pueden tener diferente Eficiencia.


Se los escribe en Seudo cdigo:


Verificacin

E = F(n)= n1*n2*..ny= ny
E = F(n)= kn

Medicin de la Eficiencia


Cmo comparar la Eficiencia Real de 2


Algoritmos?


Programndolos, implementndolos y midiendo para el


mismo Lote de Prueba: el tiempo de ejecucin y los
recursos utilizados.
Suele ser caro, y una vez realizado no suele ser
sencillo volver atrs y corregir.

Anlisis de Rendimiento
Mediante la complejidad en el Tiempo y en el Espacio

Complejidad en el Tiempo: cantidad de tiempo necesario para la

Complejidad en el Espacio: cantidad de memoria necesaria para

Tiempo de Ejecucin


ejecucin
la ejecucin

Tiempo de Ejecucin: depender del programa y de su


entrada (carga de trabajo).

El tiempo medio suele ser mas realista. Para usarlo todos los
tipos de entradas son equiprobables.
El Tiempo Mximo depende de la Carga Mxima: y no siempre
se puede establecer con claridad o es estadsticamente variable




Complejidad espacial


Depender del lenguaje elegido.

En el ejemplo las variables i, n variables positivas y


enteras.


t2
t3

Fin Mientras

t4

COMO MINIMO, REALIZAR:


De la Bibliografa


Del Capitulo 1: Ejercicios: 1.1, 1.2, 1.3, 1.4, 1.5,


1.6,1.8, 1.9, 1.12, 1.13, 1.15
Del Capitulo 2: Ejercicios: 2.5, 2.7, 2.8

En Lenguaje Pascal, usando Char o Integer, usar 2 bytes cada


Uno.


Memoria = 2bytes

i++

T(n)= t1+n*t2+n*t3+t4= n(t2+t3)+t1+t4


Eficiencia F(n)=n

En lenguaje C, siendo Char, usa 1 bytes c/u




t1

Trabajos Prcticos

Cantidad de memoria para alcanzar la solucin.




i=0
Mientras i<n


El tiempo total para una Funcin se puede


determinar por el tiempo requerido para cada
instruccin, multiplicadas por las veces que se
ejecutan.

Memoria = 4bytes.

El Algoritmo implementado en Lenguaje C tiene menor i=0


Mientras i<n
complejidad Espacial.
Cdigo
i++
Fin Mientras

Interseccin

Interseccin
AB

AC

AD

Interseccin

Interseccin
AB

AC

BA

AD

BC

AB

BD

Interseccin

AC

AD

BA

BC

DA

DB

BD

DC

Interseccin
AB

AC

AD

BA

BC

DA

DB

EA

EB

AB

BD

EC

AC

AD

BA

BC

DC

DA

DB

ED

EA

EB

Interseccin

BD

DC

EC

ED

Interseccin
AB

AC

AD

BA

BC

DA

DB

EA

EB

AB

BD

EC

AC

AD

BA

BC

DC

DA

DB

ED

EA

EB

BD

DC

EC

ED

Interseccin

Interseccin
AB

AC

AD

BA

BC

DA

DB

EA

EB

AB

BD

EC

AC

AD

BA

BC

DC

DA

DB

ED

EA

EB

Interseccin

BD

DC

EC

ED

Interseccin
AB

AC

AD

BA

BC

DA

DB

EA

EB

AB

BD

EC

AC

AD

BA

BC

DC

DA

DB

ED

EA

EB

Interseccin

BD

DC

EC

ED

Interseccin
AB

AC

AD

BA

BC

DA

DB

EA

EB

AB

BD

EC

AC

AD

BA

BC

DC

DA

DB

ED

EA

EB

BD

DC

EC

ED

Interseccin

Interseccin
AB

AC

AD

BA

BC

DA

DB

EA

EB

AB

BD

EC

AC

AD

BA

BC

DC

DA

DB

ED

EA

EB

Interseccin

BD

DC

EC

ED

Interseccin
AB

AC

AD

BA

BC

DA

DB

EA

EB

AB

BD

EC

AC

AD

BA

BC

DC

DA

DB

ED

EA

EB

Interseccin

BD

DC

EC

ED

Interseccin
AB

AC

AD

BA

BC

DA

DB

EA

EB

AB

BD

EC

AC

AD

BA

BC

DC

DA

DB

ED

EA

EB

BD

DC

EC

ED

Interseccin

Interseccin
AB

AC

AD

BA

BC

DA

DB

EA

EB

AB

BD

EC

BC

DC

DA

DB

ED

EA

EB

AC

AD

BA

BC

BD

DA

DB

DC

EA

EB

EC

ED

AB

AB

BA

AD

BC

DA

AC

BD

DB

AB

AC

AD

AD

BA

BA

BA

BC

BD

BC

BD

BD

DA

DA

DB

DA

DB

DC

AB

ED

DB

EA

EB

EC

EB

EA

EB

EC

EC

ED

ED

Interseccin

Interseccin

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

ED

EC

ED

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

BA

BC

BD

DA

DB

EA

EB

EC

ED

1
1

1
1
1

DC

1
1

1
1

AB

AC

BC

DA

DB

EA

EB

1
1

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

ED

EC

AC

DC

DC

EA

EB

AD

AC

DC

EA

AC

AB

AD

BC

DC

BD

Interseccin
AB

AC

AD

BA

Interseccin
AB

AC

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

10

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

BC

DA

DB

EA

EB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

ED

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

Interseccin
AB

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

Interseccin
AB

AC

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

11

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

BC

DA

DB

EA

EB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

ED

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

Interseccin
AB

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

Interseccin
AB

AC

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

12

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

BC

DA

DB

EA

EB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

ED

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

Interseccin
AB

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

Interseccin
AB

AC

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

13

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

BC

DA

DB

EA

EB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

ED

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

Interseccin
AB

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

Interseccin
AB

AC

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

14

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

BC

DA

DB

EA

EB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

ED

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

Interseccin
AB

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

Interseccin
AB

AC

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Interseccin
AB

AC

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

BC

DA

DB

EA

EB

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

15

Interseccin
AB

AC

BC

DA

DB

EA

1.- Seleccionar vrtice sin colorear


y pintarlo de un color.

AD

BA

EB

Interseccin

BD

DC

EC

2.- Recorrer lista de vrtices sin


colorear. Para cada vrtice sin
colorear, determinar si ya posee
una arista para cualquier vrtice
coloreado (pintado del mismo
color). Si no existen aristas,
pintar vrtice con el mismo color.

ED

Solucin con Algoritmo vido:


AB

AD

BA

BC

DA

DB

EA

Interseccin

AC

EB

BD

Color

Turnos

ROJO:

AB, AC, AD, BA, DC, ED

AZUL:

BC, BD, EA

DC

EC

ED

AMARILLO:

DA, DB

VERDE:

EB, EC

Interseccin
Solucin con Algoritmo vido:

Solucin con Algoritmo vido:

Color

Turnos

Color

Turnos

ROJO:

AB, AC, AD, BA, DC, ED

ROJO:

AB, AC, AD, BA, DC, ED

AZUL:

BC, BD, EA

AZUL:

BC, BD, EA

AMARILLO:

DA, DB

AMARILLO:

DA, DB

VERDE:

EB, EC

VERDE:

EB, EC

Interseccin

Interseccin
Solucin con Algoritmo vido:

Solucin con Algoritmo vido:

Color

Turnos

Color

Turnos

ROJO:

AB, AC, AD, BA, DC, ED

ROJO:

AB, AC, AD, BA, DC, ED

AZUL:

BC, BD, EA

AZUL:

BC, BD, EA

AMARILLO:

DA, DB

AMARILLO:

DA, DB

VERDE:

EB, EC

VERDE:

EB, EC

16

INTRODUCCIN
Estructura de Datos
Tipos Abstractos de Datos (TADS)

Para poder obtener un programa que resuelva un problema


dado, son necesarios varios pasos:

La formulacin y especificacin del problema


El diseo de una solucin
La implementacin
Las pruebas y documentacin
Evaluacin de la solucin







L.F.M.

97

98

Como obtener a partir de un problema, un


programa que lo resuelva?

Importante: saber claramente lo que se quiere resolver


(especificaciones claras).

Una vez conocido el modelo del problema, se intenta resolver


basndose en el modelo.


Hay problemas que no tienen definido un modelo claro, que slo


se puede definir experimentando.


Otros se pueden plantear usando modelos formales: hay un


modelamiento que se soporta en una teora bien definida
(matemtica, fsica, ciencias de la computacin, etc.)

Esta solucin se alcanza mediante la aplicacin de


un algoritmo.

Algoritmo: una secuencia finita de instrucciones, cada una de


ellas con un significado claro, que tienen que realizarse con una
cantidad finita de esfuerzo y en un tiempo finito.

99

100

TDA
MODELO
MATEMATICO

ALGORITMO
INFORMAL

TIPOS DE
DATOS
ABSTRACTOS

ESTRUCTURA
DE DATOS

PROGRAMA
EN PSEUDOCODIGO

PROGRAMA
EN EL
LENGUAJE

INSTANCIACIONES

EJECUCION
EN LA
MAQUINA

Especificacin
del problema

Programa
Algoritmo
Definicin
de TDAs

102

17

Abstraccin - Modelo
Abstraccin - Modelo



Uno de los objetivos de la computacin es resolver problemas.


Normalmente los problemas son confusos y lo primero que se tiene
que hacer es entender el problema para apartar los detalles no
esenciales y dejar slo los que sirven.
Se debe hacer su propia representacin abstracta o modelo del
problema. Este proceso se llama abstraccin.

El modelo define una perspectiva abstracta del


problema.
El modelo se enfoca slo en aspectos relacionados con el
problema, definiendo slo las propiedades del problema.
Estas propiedades incluyen:
 los datos que son afectados,
 las operaciones que son identificadas por el
problema.

Problema

abstraccin
modelos
103

104

Tipo de datos (TD)

Tipo de datos (TD)

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:


105

106

Estructura de datos

Estructura de Datos

Representacin en el computador de los datos


caractersticas relevantes de un objeto o de un concepto.

Los datos o caractersticas que se consideran relevantes


dependen del contexto en que se aplican.


datos
centro

crculo
C1

radio
color
107

El tipo boolean tiene dos valores: {false, true}


 Una variable boolean puede tomar slo uno de esos
valores;
Operaciones booleanas: la negacin, la conjuncin y la
disyuncin cuya representacin es: not, and y or
respectivamente.

Una estructura de datos es una coleccin de variables


organizadas de alguna manera determinada.
Es una manera de almacenar y organizar datos para
facilitar el acceso, modificaciones y poder operar con
sus elementos.
Se construyen mediante agrupamiento de elementos
bsicos de almacenamiento.
 Agrupamientos reciben un nombre que se puede
usar para formar otras estructuras.
108

18

Estructura de datos

Abstraccin de Datos - TAD

Para formar las agrupaciones existen varios mecanismos:

Un TDA es un tipo de dato definido por el programador


que se puede manipular de un modo similar a los tipos
de datos definidos por el lenguaje,

Arreglo: formado por una secuencia de celdas o estructuras


de tipos iguales. Cada celda de un arreglo se referencia
mediante un ndice.

Los TDA constituyen una forma de generalizacin y


encapsulamiento de los aspectos ms importantes de la
informacin que se debe manejar en la resolucin de un
problema, sin considerar las cuestiones relativas a la
implementacin.

Registro: formado por una coleccin de celdas, campos, de


tipos posiblemente distintos. Se pueden agrupar en arreglos.

109

110

Abstraccin de Datos - TAD

Abstraccin de Datos - TAD

Un TDA es una generalizacin de los tipos


de datos bsicos y de las operaciones
primitivas.
TAD = Representacin
(estruct. de datos)

Ejemplo:
 int vector [10];

declaracin del arreglo

vector

Operaciones
(mtodos)

sumar

insertar
asignar
eliminar
111

buscar
112

Definicin

Abstraccin de Datos - TAD

Formalmente el TDA es una tripleta (D, F, A) con los siguientes




componentes:

Un TAD engloba dos clases de


abstracciones:

Un conjunto de dominios, D

Abstracciones de datos.

Un conjunto de funciones sobre los dominios, F

Abstracciones funcionales.

Un conjunto de axiomas o propiedades definidas a partir de


las funciones y elementos de los dominios, A
113

114

19

Abstraccin de Datos - TAD

Abstracciones de datos

Aparecen al abstraer el significado de los diferentes tipos de datos


significativos que intervienen en el problema.

Permiten definir nuevos tipos de datos especificando sus posibles


valores y las operaciones que los manipulan.

Cmo realizar la especificacin formal un


TDA?

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.

Definicin del tipo: Se debe indicar


 el nombre tanto del TDA y del elemento base del
mismo y/o otros TDA involucrados en la definicin del
TDA
 los invariantes de representacin.
Invariante de un TDA (Dominio de la estructura): Es
una proposicin que expresa el conjunto de valores
vlidos del TDA.
 El invariante permite saber qu elementos pertenecen
o no al TDA (opcional).

115

Cmo realizar la especificacin formal


un TDA?

La especificacin de un TDA es la
descripcin del comportamiento del
mismo. Debe formalizarse.


116

Tipos de especificaciones formales de un


TDA:

1.

Axiomtica: expresin de la forma de las operaciones, indicando las


reglas a seguir para realizar cada operacin.

2.

Semntica: expresin de la operatoria de las operaciones.



Se especifican las consecuencias de las operaciones para el
TDA.

Se da mediante el lenguaje natural, o mediante especificacin
algebraica.
Generalmente con notacin funcional, se indica sobre qu
conjunto actan las operaciones y qu dan como resultado.

Indica qu hace el TDA.

Especificar la sintaxis correspondiente a


las operaciones propias del TDA, o
primitivas del mismo.

117

118

Ejemplo: Especificacin Lgica del TDA


Cadena

Descripcin de las operaciones


Cada operacin relacionada con la estructura se describe
con:

Nombre de la operacin.

Descripcin breve de su utilidad.

Datos de entrada a la operacin

Datos que genera como salida la operacin.

Pre-condicin: Condicin que deber cumplirse antes de
utilizar la operacin para que se realice sin problemas

Post-condicin:Condicin en que queda el TDA despus
de ejecutar la operacin.
119

Elementos:


todos los caracteres alfabticos (letras maysculas y


minsculas), caracteres numricos y caracteres especiales.

Estructura: hay una relacin lineal entre los


caracteres.
Dominio: existen entre 0 y 80 caracteres en cada valor
del TDA CADENA.


El dominio sern todas aquellas secuencias de caracteres que


cumplan con las reglas.
120

20

Ejemplo: Especificacin Lgica del TDA


Cadena
Operaciones:

Operaciones: (continuacin)

BORRA_INICIO

Ejemplo: Especificacin Lgica del TDA


Cadena

AGREGA_FINAL

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.

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.




121

122

Ejemplo: Especificacin Lgica del TDA


Cadena

Operaciones: (continuacin)


Ejemplo: Especificacin Lgica del TDA


Cadena

VACA








Operaciones: (continuacin)


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).







123

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

125

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).

124

Ejemplo: Especificacin Lgica del TDA


Cadena

LLENA


Es la forma concreta en que se representan los


datos en un determinado lenguaje de
programacin.
Se debe ocultar la representacin de los
elementos del tipo de modo que slo se pueda
actuar sobre ellos con las operaciones
proporcionadas.


Una vez definido se podrn declarar variables de ese


tipo y operar con ellas.
126

21

TADs - Implementacin

TADs - Aplicacin







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.

Editor de archivos secuenciales con cinco operaciones:








Crear un nuevo archivo,


Insertar,
Reemplazar,
Eliminar,
Avanzar y retroceder, actuando siempre sobre el registro actual.

Para las especificaciones en lenguaje natural hay que


describir el nombre de las operaciones a realizar, junto
con las excepciones de estas operaciones.

127

TADs - Ejemplo

TADs - Aplicacin
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.

Implementacin de las operaciones:

Archivo_Nuevo (Archivo) {
Longitud = 0;
Reg_Actual = 0;
}

130

TADs - Ejemplo

TADs - Ejemplo

Insertar (Archivo, RegNuevo) {


for (j = Longitud; j <= RegActual; j--)
Archivo [j+1] = Archivo[j];

Archivo[RegActual+1] = RegNuevo;
Longitud ++;
RegActual ++;

Retroceder (Archivo) {
if RegActual != 0
RegActual --;
}

131

132

22

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 ++;
}

133

134

el TDA NumeroComplejo

TADs - Ejemplo


Definicin del tipo




Reemplazar (Archivo,RegNuevo) {
if RegActual != 0
Archivo[RegActual] =
RegNuevo;
}




Numero complejo: Conjunto de pares de elementos (a,b) de tipo


entero.

Operaciones: descripcin de cada una de elas


suma :
NumeroComplejo NumeroComplejo  NumeroComplejo
suma((x, y), (u, v)) = (x + u, y + v)

producto :
NumeroComplejo NumeroComplejo  NumeroComplejo
producto((x, y), ((u, v), = (xu yv, xv + yu)

135

el TDA NumeroRacional

136

TADs - Ejemplo
Operacin

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)
137

r1 = Crear_Racional (2, 3);


r2 = Crear_Racional (5, 7);
// s es la suma de r1 y r2
s = Crear_Racional ( Numerador( r1 ) * Denominador ( r2 )
+ Numerador ( r2 ) * Denominador ( r1 ),
Denominador ( r1 ) * Denominador ( r2 ) );
printf( %d / %d , Numerador ( s ), Denominador ( s ) )

138

23

ESPECIFICACIN

Implementacin
#define MAX 100
typedef struct Racional {
int num, den;
};
Racional info[MAX]; // arreglo para almacenar los racionales
int ultimo = -1;
// para controlar el tamao del arreglo

Racional Crear_Racional (Entero n,d) {


Necesita:
dos valores enteros, n y d.
Produce:
el nmero racional n / d.
Error:
si d es cero.
}
Entero Numerador (Racional r ) {
Necesita:
un racional r.
Produce:
el numerador de r.
}
Entero Denominador (Racional r ) {
Necesita:
un racional r.
Produce:
el denominador de r.
}

Un racional

info

MAX

num

17

den

ltimo

139

140

Implementacin

Implementacin
int Crear_Racional (int n, int d, int i) {
if (d == 0) {
printf("\n Error:Division por cero");
getch();
exit(0);
}
else {
info[i].num = n;
info[i].den = d;
ultimo++;
}
return ultimo;
}

int Numerador (int r) {


return info[r].num;
}

int Denominador (int r) {


return info[r].den;
}

141

Implementacin

142

Implementacin

void Imprime_Racional(void) {
int num;
printf("\nIndique la posicion del racional que quiere ver: ");
scanf("%d", &num);
if( num >= ultimo)
printf(\n Error, fuera de rango);
else
printf( "\nRacional ingresado es : %d/%d en la posicion %d",
Numerador(num), Denominador(num), num); getch();
}

143

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX 100
typedef struct Racional {
int num, den;
};
Racional info[MAX]; // arreglo donde se almacenaran los
// numeros racionales
int ultimo = -1;
144

24

Implementacin
int main() {
int nume, deno, pos, i, n;
printf("\n Cuantos datos? "); scanf("%d",&n);
if ( n >= ultimo) {
printf(\n Error, fuera de rango);
return 1;
}
else
for(i = 0; i < n; i++) {
printf("\nNumerador: "); scanf("%d", &nume);
printf("\nDenominador: "); scanf("%d", &deno);
pos = Crear_Racional(nume, deno, i);
}
Imprime_Racional();
return 0;
}
145

Material apoyado por apuntes de:


Claudio N. Bara A., Fac. Politcnica, U. Nacional de Asuncin, Py.
Aguilar y Martinez: Algoritmos y Estructuras de datos.
Apuntes de Rolando Simon Titiosky.

Bibliografa


Joyanes A. y Zahonero M. Estructura de datos, algoritmos,


abstraccin y objetos / Luis Joyanes Aguilar e Ignacio Zahonero
Martinez. -- Madrid : McGraw-Hill, 1998. 858 p.
Weiss, Mark Allen. Estructura de datos: compatible con Java 2 /
Mark Allen Weiss. Madrid : Addison Wesley, 2000. 776 p.

147

25

Vous aimerez peut-être aussi