Download Estructuras de datos

Document related concepts

Árbol binario wikipedia , lookup

Lista enlazada wikipedia , lookup

Recorrido de árboles wikipedia , lookup

Topología arbórea wikipedia , lookup

Estructuras de datos persistentes wikipedia , lookup

Transcript
Teoría y Aplicación de la Informática I
Definiciones
Tipos de datos
 Un tipo de dato determina el conjunto de valores al que pertenece
una constante, o que puede tomar una variable o expresión, o que
pueden ser generados por un operador o función
 También determina el conjunto de operaciones que se puede
aplicar al conjunto de valores
Cardinalidad
 El número de valores distintos que pertenecen a un tipo T se llama
cardinalidad de T
 La cardinalidad proporciona una medida de la cantidad de memoria
que se necesita para representar una variable x de tipo T
_____________________________________________________________________
Estructuras de datos
1
Teoría y Aplicación de la Informática I
Tipos de Datos Elementales
Son tipos atómicos, sin estructura interna
 Tipos elementales normalizados, estándar o predefinidos
o Comprenden típicamente:
 los números enteros (integer)
 los números fraccionarios (real)
 los valores lógicos, falso y verdadero (boolean)
 caracteres de escritura (char)
o Incorporan un conjunto adecuado de operadores elementales.
Entre ellos son muy importantes, y en general se aplican a
todos los tipos de datos:
 Comprobación de igualdad:
x=y
 Asignación a una variable x: x := y
El tipo integer
o Comprende un subconjunto de los enteros, cuyo tamaño varía
de computador a computador
o Todas las operaciones con datos de este tipo son exactas
o El proceso de cálculo se interrumpe cuando aparece un
resultado que está fuera del conjunto de números
representables en el computador
o Operadores normalizados:
 +
  *
 div (división entera)
 mod (resto de la división entera)
_____________________________________________________________________
Estructuras de datos
2
Teoría y Aplicación de la Informática I
El tipo real
o Designa un subconjunto de los números reales
o En la aritmética de tipo real se permite una cierta imprecisión,
dentro de los límites del error de redondeo producido por el
cálculo con un número finito de dígitos
o Operadores normalizados:
 +
  *
 /
El tipo boolean
o Sus dos valores correspondientes son: true y false
o Operadores:
 u or
 o and
  o not
(unión lógica)
(conjunción lógica)
(negación lógica)
El tipo char
o Comprende el conjunto de caracteres imprimibles
o El código ASCII es el más ampliamente admitido
o En general se puede asumir que:
 Contiene las 26 letras del alfabeto latino, los 10 dígitos
de la numeración árabe y signos de puntuación
 Contiene un carácter blanco o espacio
_____________________________________________________________________
Estructuras de datos
3
Teoría y Aplicación de la Informática I
 Tipos elementales definidos por el usuario
Enumeración
o Definido por enumeración del conjunto de todos los posibles
valores
type T = (c1, c2, …, cn)
card (T) = n
o Ejemplos:
type forma = (rectángulo, cuadrado, elipse, círculo)
card (forma) = 4
var f: forma
f := rectángulo
type color = (rojo, amarillo, verde)
card (color) = 3
var c: color
c := verde
Subrango
o Útil cuando una variable puede tomar valores de cierto tipo en
un intervalo específico
type T = min .. max
o Ejemplo:
type año = 1900 .. 1999
card (año) = 100
var a: año
r := 1998
_____________________________________________________________________
Estructuras de datos
4
Teoría y Aplicación de la Informática I
Tipos de Datos Estructurados
 Se definen nuevos tipos de datos en función de otros definidos
previamente
 Los valores de los tipos estructurados son usualmente
agrupaciones de valores componentes de los tipos constituyentes
definidos previamente
 Si solamente hay un tipo constituyente, esto es, si todos los
componentes son del mismo tipo, entonces éste se denomina tipo
base. Este es el caso de un array
 Como los tipos constituyentes, a su vez, pueden también ser
estructurados, pueden construirse jerarquías de estructuras. Los
componentes últimos de una estructura deben ser atómicos
 La cardinalidad de un tipo estructurado es el producto de las
cardinalidades de sus componentes
 Tipos de Datos Estructurados Estáticos
o Son las estructuras más básicas:
 arreglo o array
 registro o record
 fichero secuencial
o Son estáticos en la memoria
 Tipos de Datos Estructurados Dinámicos
o Estructuras más complicadas:
 Pila o stack
 Cola o queue
 lista enlazada o linked list
 árbol o tree
 grafo
o Son generadas dinámicamente durante la ejecución del
programa, y pueden variar de tamaño y de forma
_____________________________________________________________________
Estructuras de datos
5
Teoría y Aplicación de la Informática I
La Estructura Array
 Estructura homogénea, todos sus componentes son del mismo
tipo base
 Estructura de acceso aleatorio, todos sus componentes pueden
seleccionarse arbitrariamente y son igualmente accesibles
 La definición de un tipo array T especifica tanto un tipo base T0
como un tipo índice Ti.
type T = array [ Ti ] of T0
Ejemplo:
type Fila = array [1..5] of real
var x: Fila
Operaciones con los arrays
o Asignación mediante un constructor
x := T (c1, c2, … ,cn)
Ejemplo : x := Fila (0.5, 0.25, 0.125, 0.0625, 0.03125)
o Selección de un componente individual del array
x [i]
Ejemplo:
Fila [2]
o Asignación o actualización selectiva
x [i] := y
Ejemplo:
Fila [2] := 0.003
 Cardinalidad de un array T = array [ Ti ] of T0
card(T) = (card(T0)) card(Ti)
Ejemplo :
card(Fila) = (card(real)) 5
_____________________________________________________________________
Estructuras de datos
6
Teoría y Aplicación de la Informática I
 Los elementos constituyentes de un array pueden estar a su vez
estructurados
 Una variable de tipo array cuyos componentes son también arrays
se denomina matriz
Ejemplos:
M: array [1..10] of Fila
M: array [1..10] of array [1..5] of real
M: array[1..10, 1..5] of real
card (M) = (card (real)) 50
 M[i][j], o bien M[i, j] designa el componente j de la fila M[i], que es el
componente i de M
 Un array puede ser definido de n-dimensiones ampliando los
conceptos y definiciones directamente
Ejemplo:
N: array [1..10, 1..5, 1..2, 1..3] of real
var multi: N;
multi [3, 3, 3, 3] := 3
card (N) = (card (real)) 300
_____________________________________________________________________
Estructuras de datos
7
Teoría y Aplicación de la Informática I
La Estructura Registro
 Un registro es una colección de información relativa a una entidad
particular
 Un campo es un ítem o elemento de datos elementales. Está
caracterizado por su tipo de datos
 Un registro es una colección de campos lógicamente relacionados,
que pueden ser tratados como una unidad por un programa
 Los registros organizados en campos se denominan registros
lógicos.
 Un registro físico o bloque es la cantidad más pequeña de datos
que pueden transferirse en una operación de entrada/salida
 Un registro lógico puede ocupar menos de un registro físico, un
registro físico o más de un registro físico
 Un archivo o fichero es una colección de registros relacionados
entre sí y organizados para un propósito específico
 La cardinalidad del tipo estructurado registro es el producto de las
cardinalidades de los tipos componentes
 El tipo registro T se define de la forma siguiente:
type T =
record
s1: T1;
s2: T2;
…
sn: Tn
end
card (T) = card (T1) * card (T2) * … * card (Tn)
_____________________________________________________________________
Estructuras de datos
8
Teoría y Aplicación de la Informática I
Ejemplos :
type Fecha =
record
día : 1..31 ;
mes : 1..12 ;
año :1..2500
end
type Persona = record
nombre: array [1 .. 40] of char;
apellido: array [1 .. 40] of char;
nacimiento: Fecha ;
sexo: (masculino, femenino) ;
estadocivil: (soltero, casado, viudo)
end
 Ahora se pueden declarar las variables
var f : Fecha
var p : Persona
Operaciones con los registros
o Asignación mediante un constructor
x := T (x1, x2, …, xn)
donde los xi son valores de los tipos constituyentes Ti.
Ejemplos :
f := Fecha (4, 5, 1978)
p := Persona (‘Carlos’, ‘Acosta’, Fecha(10, 4, 1997),
masculino, soltero)
o Selección de un campo del registro
x.si
Ejemplos:
f.dia
p.nombre
p.estadocivil
_____________________________________________________________________
Estructuras de datos
9
Teoría y Aplicación de la Informática I
o Actualización o asignación a un campo de un registro
x.si := xi
donde xi es un valor o expresión de tipo Ti
Ejemplos:
f.mes := 10
p.nombre := ‘Juan’
p.nacimiento.año := 1991
Programa que muestra como utilizar las variables
registro
El siguiente programa tiene por objeto contar el número de personas,
representadas por la variable array personas, que son
simultáneamente femeninas y solteras
var personas: array [1..N] of Persona
contador, i: integer
contador := 0
for i := 1 to N do
if ((personas[i].sexo = femenino) and
(personas [i].estadocivil = soltero)) then
contador := contador + 1
end if
end for
Variante con la instrucción with
var personas: array [1..N] of Persona
contador, i: integer
contador := 0
for i := 1 to N do
with persona[i] do
if ((sexo = femenino) and (estadocivil = soltero)) then
contador := contador + 1
end if
end with
end for
_____________________________________________________________________ 10
Estructuras de datos
Teoría y Aplicación de la Informática I
Listas Ordenadas
 Ejemplos:
o Los días de la semana
(Domingo, Lunes, Martes, Miércoles, Jueves, Viernes, Sábado)
o Los valores de los naipes
(2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, As)
 Una lista ordenada puede estar vacía, o puede ser escrita como:
(a1, a2, a3, …, an)
donde ai son átomos de un conjunto S
 Operaciones que pueden ser ejecutadas en las listas ordenadas:
o
o
o
o
o
Encontrar la longitud, n, de la lista
Leer la lista de izquierda a derecha, o de derecha a izquierda
Recuperar el i-ésimo elemento, 1 i n
Almacenar un nuevo valor en la i-ésima posición, 1 i n
Insertar un nuevo valor en la posición i, 1 i n+1, causando
que los elementos numerados i, i+1, …, n tengan la
numeración i+1, i+2, …, n+1
o Borrar el elemento de la posición i, 1 i n, causando que los
elementos numerados i+1, i+2, …, n tengan la numeración i,
i+1, …, n-1
 Una manera de implementar una lista ordenada, es utilizando un
array, asociando el elemento de la lista ai con el índice i del array
_____________________________________________________________________ 11
Estructuras de datos
Teoría y Aplicación de la Informática I
Tipo Abstracto o Abstracción
 Una abstracción se caracteriza por un conjunto de operadores
definido por el programador
 Su representación consiste de:
o Declaración de las variables cuyos valores definen un estado
del tipo
o Declaración de los procedimientos o funciones que
implementan las operaciones del tipo
o Código de inicialización
 Este tipo de mecanismo está disponible en varios Lenguajes de
Programación de Alto Nivel
_____________________________________________________________________ 12
Estructuras de datos
Teoría y Aplicación de la Informática I
 Los tipos Abstractos o Abstracciones se definen así:
type class-name = abstracción
variable declarations
procedure P1 (…)
begin
…
end
procedure P2 (…)
begin
…
end
.
.
.
procedure Pn (…)
begin
…
end
begin
código de inicialización
end
 Si queremos definir una variable A del tipo class-name:
var A: class-name
 Para ejecutar cualquiera de la operaciones:
A.P1 (…)
A.P2 (…)
.
.
.
A.Pn (…)
_____________________________________________________________________ 13
Estructuras de datos
Teoría y Aplicación de la Informática I
 Ejemplo:
Se define el tipo abstracto árbol
type árbol = abstracción
var altura: integer
procedure REGAR_Y_CRECER ()
begin
altura := altura + 1
end
procedure ABONAR_Y_CRECER ()
begin
altura := altura + 2
end
procedure IMPRIMIR_ALTURA_ÁRBOL ()
begin
print (altura)
end
begin
altura := 2
end
Se declara una variable de tipo árbol
var mi_árbol: árbol
_____________________________________________________________________ 14
Estructuras de datos
Teoría y Aplicación de la Informática I
Se ejecutan los procedimientos en un fragmento de un
programa
.
.
.
mi_árbol.IMPRIMIR_ALTURA_ÁRBOL ()
mi_árbol.ABONAR_Y_CRECER ()
mi_árbol.IMPRIMIR_ALTURA_ÁRBOL ()
mi_árbol.REGAR_Y_CRECER ()
mi_árbol.IMPRIMIR_ALTURA_ÁRBOL ()
mi_árbol.ABONAR_Y_CRECER ()
mi_árbol.REGAR_Y_CRECER ()
mi_árbol.IMPRIMIR_ALTURA_ÁRBOL ()
.
.
.
La salida del fragmento del programa es:
.
.
.
2
4
5
8
.
.
.
_____________________________________________________________________ 15
Estructuras de datos
Teoría y Aplicación de la Informática I
Pilas (Stacks)
 Una pila es una lista ordenada en la cual todas las inserciones y
eliminaciones se hacen en un extremo, llamado tope (top)
 Sea la pila S = (a1, a2, …, an)
o a1 es el elemento que está en el fondo de la pila
o ai se encuentra por encima del elemento ai-1, 1 i n
 Si un stack se carga con los elementos A, B, C, D, E, en ese orden,
entonces el primer elemento a ser eliminado es E
E
D
C
B
A
 El último elemento que fue insertado en la pila, es el primero que
debe salir. Por este motivo las pilas son llamadas listas LIFO (Last
In, First Out)
_____________________________________________________________________ 16
Estructuras de datos
Teoría y Aplicación de la Informática I
Ejemplo del Uso de Pilas en la solución de problemas
relacionados con la computación
Procesamiento de las llamadas a subrutinas y sus retornos
 Tenemos un procedimiento principal y tres rutinas
 Los retornos se deben hacer en orden inverso a las llamadas
 Entonces, las direcciones de retorno se van almacenando en una
pila, y cada vez que termina una ejecución se retorna a la dirección
indicada en el tope de la pila
_____________________________________________________________________ 17
Estructuras de datos
Teoría y Aplicación de la Informática I
Operaciones con las Pilas
 ADD (item, stack)  stack
Inserta item en stack, y devuelve el stack modificado
 DELETE (stack)  stack
Elimina el elemento del tope de stack, y devuelve el stack
modificado
 TOP (stack)  item
Devuelve el ítem ubicado en el tope de stack. No modifica stack
 ISEMPTY (stack)  boolean
Devuelve ‘true’ si stack está vacío, y “false” en caso contrario
Implementación de una pila
Supongamos que utilizamos un lenguaje que admite la definición de
tipos por medio de abstracción. Entonces, podríamos definir el tipo
stack así:
type stack = abstracción
const N = 1000
var top: integer
var s: array [1..N] of integer
procedure ADD (item)
begin
if top  N then
call STACK_FULL
else
top := top + 1
s [top] := item
end if
end
_____________________________________________________________________ 18
Estructuras de datos
Teoría y Aplicación de la Informática I
procedure DELETE ()
begin
if top  0 then
call STACK_EMPTY
else
top := top – 1
end if
end
procedure TOP ()
begin
if TOP = 0 then
return (error)
else
return (s [top])
end if
end
procedure ISEMPTY ()
begin
if top = 0 then
return (true)
else
return (false)
end if
end
begin { inicialización }
top := 0
end
Si queremos usar esta definición:
var p: snack
begin
p.ADD (1)
p.ADD (2)
p.ADD (3)
p.DELETE()
print (p.TOP())
end
_____________________________________________________________________ 19
Estructuras de datos
Teoría y Aplicación de la Informática I
Colas (Queues)
 Una cola es una lista ordenada en la cual todas las inserciones se
hacen en un extremo, el final (rear), mientras que las eliminaciones
se hacen en el otro extremo, el frente (front)
 Sea la cola S = (a1, a2, …, an)
o a1 es el elemento que está al frente de la cola
o an es el elemento que está al final de la cola
o ai+1 se encuentra atrás del elemento ai, 1 i n
 La cola requiere que el primer elemento que se inserta sea el
primero que se saque. Por esto, son conocidas como listas FIFO
(First In, First Out)
Ejemplo del Uso de Colas en la solución de problemas
relacionados con la computación
Planificación del procesador
 Cada vez que un proceso está listo para ejecutarse, se incorpora al
final de una cola de Listos (ready queue)
 El CPU scheduler selecciona el proceso que está al frente de la
cola de Listos para asignarle la CPU
_____________________________________________________________________ 20
Estructuras de datos
Teoría y Aplicación de la Informática I
Operaciones con las Colas
 ADDQ (item, queue)  queue
Inserta item al final de la cola, y devuelve la cola modificada
 DELETEQ (queue)  queue
Saca el elemento que está al frente de la cola, y devuelve la cola
modificada
 FRONT (queue)  item
Devuelve el elemento que está al frente de la cola sin modificarla
 ISEMPTYQ (queue)  boolean
Devuelve ‘true’ si la cola está vacía, y ‘false’ en caso contrario
Implementación de una Cola
Para implementar la cola usando arrays se necesita:
o Un array de una dimensión
o Las variables front y rear
o Vamos a adoptar la convención de que front apunta a una
posición antes del comienzo real de la cola, y rear apunta al
último elemento de la cola
o Inicialmente front = rear = 0
o La cola está vacía cuando front = rear
Podemos definir la cola como sigue:
const N = 1000
var front, rear: integer
var Q: array [1..N] of integer
front := 0
rear := 0
_____________________________________________________________________ 21
Estructuras de datos
Teoría y Aplicación de la Informática I
procedure ISEMPTYQ (Q)
begin
if front = rear then
return (true)
else
return (false)
end if
end
procedure FRONT (Q)
begin
if ISEMPTYQ (Q) then
return (error)
else
return (Q [front + 1])
end if
end
procedure ADDQ (item, Q, N, rear)
begin
if rear = N then
call QUEUE_FULL
else
rear := rear + 1
Q [rear] := item
end if
end
procedure DELETEQ (Q, front, rear)
begin
if front = rear then
call QUEUE_EMPTY
else
front := front + 1
end if
end
¿Por qué esta implementación (o representación) de las colas no
es eficiente?
_____________________________________________________________________ 22
Estructuras de datos
Teoría y Aplicación de la Informática I
Una representación más eficiente de la cola se consigue haciendo
que el vector Q sea circular
o El vector Q tiene índices que van de 0 a N-1
o Cuando rear = N-1, el próximo elemento entraría a Q(0), si
ese lugar está vacío
o front apunta una posición antes del primer elemento de Q
o La cola está vacía cuando front = rear
o Inicialmente, front = rear = 0
Ejercicio: Re-escribir los procedimientos anteriores considerando
Q como vector circular
*Hay dos posibilidades:
- Usar solo N-1 posiciones del vector
front = rear  cola vacía
front = (rear + 1) mod n  cola llena
- Usar las N posiciones del vector
front = rear  cola llena y/o vacía
Usar una bandera para distinguir entre cola llena y vacía
_____________________________________________________________________ 23
Estructuras de datos
Teoría y Aplicación de la Informática I
Listas Enlazadas (Linked Lists)
 En los arrays, y las pilas y colas implementadas con arrays,
estuvimos utilizando el mapeamiento secuencial, o listas
contiguas, en las que los elementos son adyacentes en la memoria
 Consideremos la siguiente lista ordenada de palabras en inglés
que terminan con AT:
(BAT, CAT, EAT, FAT, HAT, JAT, LAT, MAT, OAT, PAT, RAT,
SAT, TAT, VAT, WAT)
 Queremos insertar la palabra GAT entre FAT y HAT, y también
eliminar la palabra LAT
 Usando listas contiguas necesitaremos mover elementos de la
lista un lugar para arriba o para abajo
 Una lista enlazada es un conjunto de nodos en los que cada nodo
apunta al siguiente nodo de la lista
 Un nodo se estructura en campos
 Los campos pueden ser de:
o Datos: DATA1, DATA2, etc
o Enlace: LINK1, LINK2, etc. Estos apuntan al siguiente nodo
de la lista (contienen la dirección del siguiente nodo de la
lista)
 Cada nodo de una lista enlazada debe tener al menos un campo
DATA y un campo LINK
 El último nodo de la lista tiene LINK = 0
 Los nodos de una lista enlazada se pueden almacenar en
posiciones de memoria que no son consecutivas
_____________________________________________________________________ 24
Estructuras de datos
Teoría y Aplicación de la Informática I
En la siguiente figura, los elementos de la lista están almacenados en
un array unidimensional llamado DATA. El array LINK almacena
punteros a los elementos del array DATA. F es un apuntador a la lista
enlazada y tiene valor 8, porque la lista comienza con BAT, que está
en DATA (8)
F=8
Representación gráfica de las listas enlazadas
_____________________________________________________________________ 25
Estructuras de datos
Teoría y Aplicación de la Informática I
Pasos para insertar GAT entre FAT y HAT
o Conseguir un nodo libre, sea X su dirección
o Poner en el campo DATA de ese nodo el valor GAT
o Poner en el campo LINK de ese nodo el valor del campo
LINK de FAT (el cual apunta a HAT)
o Poner en el campo LINK de FAT el valor X
En la siguiente figura se ven los arrays DATA y LINK después de
agregar GAT
Con la representación de listas enlazadas tenemos:
_____________________________________________________________________ 26
Estructuras de datos
Teoría y Aplicación de la Informática I
Pasos para eliminar el nodo que contiene GAT
o Identificar el nodo que precede al nodo cuyo campo DATA es
GAT (en este caso el nodo cuyo campo DATA es FAT)
o En el campo LINK del nodo identificado se debe poner el
valor que tiene el campo LINK del nodo cuyo campo DATA es
GAT
o Marcar el nodo eliminado como libre
Operaciones con las listas enlazadas
Primero definimos dos funciones auxiliares:
 GETNODE (X): devuelve un puntero X a un nodo libre, y si no hay
nodos libres, emite un mensaje de error y para
 RET(X): retorna el nodo X a la memoria
A continuación se definen procedimientos para insertar y eliminar
elementos de una lista enlazada
INSERT
 Sea T un puntero a una lista enlazada
 T = 0 si la lista no tiene nodos
 Sea X un apuntador a un nodo arbitrario de la lista T
 El siguiente algoritmo inserta un nodo con el campo DATA = item, a
continuación del nodo apuntado por X
_____________________________________________________________________ 27
Estructuras de datos
Teoría y Aplicación de la Informática I
procedure INSERT (T, X, item)
call GETNODE (I)
DATA (I) := item
if T = 0 then
T := I
LINK (I) := 0
else
LINK (I) := LINK (X)
LINK (X) := I
end if
end
DELETE
 Sea X un puntero a un nodo arbitrario de la lista enlazada T
 Sea Y el nodo que precede a X. (Y = 0 si X es el primer nodo en T,
esto es si X = T)
 El algoritmo siguiente suprime el nodo X de T
procedure DELETE (X, Y, T)
if Y = 0 then
T := LINK (T)
else
LINK (Y) := LINK (X)
end if
call RET (X)
end
_____________________________________________________________________ 28
Estructuras de datos
Teoría y Aplicación de la Informática I
Árboles (Trees)
Ejemplo
Definición
Un árbol es un conjunto finito de uno o más nodos, tal que,
o existe un nodo llamado raíz,
o el resto de los nodos están particionados en n 0 conjuntos
disjuntos T1, T2, …, Tn, donde cada uno de estos conjuntos
es, a su vez, un árbol. T1, T2, …, Tn se llaman subárboles
de la raíz
_____________________________________________________________________ 29
Estructuras de datos
Teoría y Aplicación de la Informática I
Terminología
 El nodo representa el o los ítems de información más las ramas a
los otros nodos. En la figura tenemos 13 nodos, A, B, C, …, M. La
raíz es A.
 El grado es el número de subárboles de un nodo. El grado de A es
3, de C es 1, de F es 0.
 Los nodos hojas o nodos terminales son los nodos que tienen
grado 0. {K, L, F, G, M, I, J} constituye el conjunto de nodos hojas.
 Los nodos no terminales son los nodos que no son hojas. Por
ejemplo, H es un nodo no terminal.
 Padres e Hijos: las raíces de los subárboles de un nodo X, son los
hijos de X. X es el padre de sus hijos.
Ejemplo: los hijos de D son, H, I, J; el padre de D es A.
 Los hijos de un mismo padre son hermanos.
Ejemplo: H, I, J son hermanos.
 El grado de un árbol es el máximo grado de los nodos del árbol.
El árbol de la figura tiene grado 3.
_____________________________________________________________________ 30
Estructuras de datos
Teoría y Aplicación de la Informática I
 Los antepasados de un nodo son todos los nodos a lo largo del
camino que va desde la raíz hasta el nodo en cuestión.
Ejemplo: los antepasados de M son A, D, H.
 El nivel de un nodo se define, estableciendo inicialmente la raíz a
nivel 1. Si un nodo está en el nivel l, sus hijos están en el nivel l+1.
En la figura se señala el nivel de todos los nodos del árbol.
 Altura o profundidad de un árbol: es el máximo nivel de sus
nodos. El árbol de la figura tiene altura 4.
 Una floresta es un conjunto de n 0 árboles disjuntos. Si retiramos
la raíz de un árbol, obtenemos una floresta. En la figura, si
eliminamos A tenemos una floresta con 3 árboles.
Representación en memoria
Si queremos usar listas enlazadas, cada nodo tendrá un número
variable de campos LINK, dependiendo del número de ramas
DATA LINK 1 LINK 2 … LINK n
_____________________________________________________________________ 31
Estructuras de datos
Teoría y Aplicación de la Informática I
Árboles Binarios
Definición
Un árbol binario es un conjunto finito de nodos, que está vacío,
o:
o hay un nodo llamado raíz
o el resto de los nodos está particionado en dos conjuntos
disjuntos T1 y T2 tal que T1 y T2 son árboles binarios. T1 es
el subárbol izquierdo y T2 el subárbol derecho.
Diferencias entre los árboles y los árboles binarios
 Los árboles binarios no tienen ningún nodo con grado mayor que 2
 Existe el árbol binario vacío (sin ningún nodo), pero no existe el
árbol con cero nodos
 Los dos árboles binarios que aparecen abajo son distintos
_____________________________________________________________________ 32
Estructuras de datos
Teoría y Aplicación de la Informática I
Tipos especiales de árboles binarios
Árbol asimétrico (con asimetría izquierda)
Árbol binario completo
_____________________________________________________________________ 33
Estructuras de datos
Teoría y Aplicación de la Informática I
Propiedades
 El número máximo de nodos en el nivel i de un árbol binario es 2i-1,
i1
 El número máximo de nodos en un árbol binario de profundidad k
es 2k -1, k  1
 Para cualquier árbol binario no vacío, si n0 es el número de hojas
(nodos con grado 0) y n2 el número de nodos de grado 2, entonces
n0 = n2 + 1
Representación
Cada nodo tendrá tres campos
HIJO IZQ DATO HIJO DER
_____________________________________________________________________ 34
Estructuras de datos
Teoría y Aplicación de la Informática I
Ejemplos de Representación
Representación del Árbol asimétrico (con asimetría izquierda)
Representación del Árbol binario completo
_____________________________________________________________________ 35
Estructuras de datos
Teoría y Aplicación de la Informática I
Recorrido del árbol binario
Existen tres ordenamientos principales, que surgen de la forma natural
de los árboles, con los que se puede procesar o visitar los nodos de un
árbol. Ellos son: Orden
Pre-orden
Post-orden
Supongamos que tenemos la representación de árbol de la expresión
( ( A / ( B ** ( - C ) ) ) * D + E )
Recorrido en Orden
1- Recorrer el subárbol izquierdo en Orden
2- Visitar la raíz
3- Recorrer el subárbol derecho en Orden
Si consideramos que visitar corresponde a la operación print
tendremos:
A / B ** - C * D + E
que es la notación convencional infija, aunque sin los paréntesis que
se necesitan para aclarar las precedencias
_____________________________________________________________________ 36
Estructuras de datos
Teoría y Aplicación de la Informática I
Recorrido en Pre-orden
1- Visitar la raíz
2- Recorrer el subárbol izquierdo en Pre-orden
3- Recorrer el subárbol derecho en Pre-orden
Si al visitar vamos imprimiendo tendremos:
+ * / A ** B – C D E
que es la notación prefija de la expresión
Recorrido en Post-orden
1- Recorrer el subárbol izquierdo en Post-orden
2- Recorrer el subárbol derecho en Post-orden
3- Visitar la raíz
Si al visitar vamos imprimiendo tendremos:
A B C - ** / D * E +
que es la notación postfija de la expresión
_____________________________________________________________________ 37
Estructuras de datos
Teoría y Aplicación de la Informática I
Grafos
Definición y terminología
 Un grafo G consiste de dos conjuntos:
o V: conjunto finito y no vacío de vértices
o E: conjunto de pares de vértices llamados lados
V(G) representa el conjunto de vértices del grafo G
E(G) representa el conjunto de lados del grafo G
G = (V, E) representa un grafo
 En un grafo dirigido cada lado es representado por un par
ordenado <v1, v2>. v1 es la cola y v2 la cabeza del lado. Por lo
tanto <v1, v2> y <v2, v1> representan dos lados diferentes
 En un grafo no dirigido los pares de vértices que representan un
lado no son pares ordenados, así que (v1, v2) y (v2, v1)
representan el mismo lado
o
o
o
o
o
o
o
G1 y G2 son grafos no dirigidos. G3 es un grafo dirigido
V(G1) = {1, 2, 3, 4}
E(G1) = {(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)}
V(G2) = {1, 2, 3, 4, 5, 6, 7}
E(G2) = {(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (3, 7)}
V(G3) = {1, 2, 3}
E(G3) = {<1, 2>, <2, 1>, <2, 3>}
_____________________________________________________________________ 38
Estructuras de datos
Teoría y Aplicación de la Informática I
 Si (v1, v2) o <v1, v2> son lados de un grafo, entonces v1 v2
 Como E(G) es un conjunto, un grafo no puede tener múltiples
ocurrencias del mismo lado. Si se saca esta restricción se tiene un
multigrafo
 Ejemplo de multigrafo
 Un subgrafo de G es un grafo G’ tal que V(G’)  V(G) y
E(G’)  E(G)
 Ejemplos de subgrafos de G3
 Un camino del vértice vp al vértice vq en un grafo G es una
secuencia de vértices
vp, vi1, vi2, …, vin, vq
tal que (vp, vi1), (vi1, vi2), …, (vin, vq) son lados incluidos en E(G)
 Si (vi, vj) es un lado en E(G), entonces vi y vj son adyacentes y el
lado (vi, vj) es incidente en los vértices vi y vj
_____________________________________________________________________ 39
Estructuras de datos
Teoría y Aplicación de la Informática I
Representación de Grafos
Matriz de Adyacencia
 Sea G = (V, E) un grafo con n vértices, n 1
 La matriz de adyacencia de G es un arreglo A de n x n con la
propiedad de que:
o A(i, j) = 1 si y solo si (vi, vj) (<vi, vj> para un grafo dirigido) está
en E(G)
o A(i, j) = 0 si no existe ese lado en G
 Ejemplos
Matriz de adyacencia de G1
Matriz de adyacencia de G3
 La matriz de adyacencia de un grafo no dirigido es siempre
simétrica, pues el lado (vi, vj) está en E(G) si el lado (vj, vi) también
está en E(G)
 La matriz de adyacencia de un grafo dirigido no necesita ser
simétrica
 Los 1 en la fila i nos dan los lados que salen del vértice i y los unos
en la columna j nos dan los lados que llegan al vértice j
_____________________________________________________________________ 40
Estructuras de datos
Teoría y Aplicación de la Informática I
Listas de Adyacencia
 Las n filas de la matriz de adyacencia se representan por n linked
list
 Existe una lista por cada vértice en G
 Los nodos de la lista i representan los vértices a los cuales se
puede llegar desde el vértice i
 Ejemplos
Lista de adyacencia de G1
Lista de adyacencia de G3
_____________________________________________________________________ 41
Estructuras de datos
Teoría y Aplicación de la Informática I
Bibliografía
 WIRTH, Niklaus, Algoritmos + Estructuras de Datos
Programas, Madrid, Ediciones del Castillo, 1980, pp. 4 – 22.
=
 HOROWITZ, Ellis y SAHNI, Sartaj, Fundamentos de Estruturas
de Dados, 2da ed., Río de Janeiro, Editora Campus LTDA, 1986,
pp. 47 – 49, 77 – 85, 101 – 106, 197 – 211, 252 – 259.
 JOYANES AGUILAR, Luis, Fundamentos de Programación.
Algoritmos y Estructura de Datos, 2da ed., Madrid, McGraw-Hill,
1996, pp. 204 – 220, 260 – 264, 385 – 426, 439 – 455, 466 – 473.
_____________________________________________________________________ 42
Estructuras de datos