58
Contenido del Tema 6.1. Introducción 6.2. Pilas 6.3. Colas 6.4. Listas 6.5. Arboles Binarios. Arboles Binarios de Búsqueda 6.6. Otras Estructuras. Metodología de la Programación. Curso 2002/03. Pág. 1 Metodología de la Programación. Curso 2002/03. Pág. 2 Objetivos • Especificación e Implementación de nuevas estructuras de datos Técnica: Abstracción de Datos Tipos de Estructuras de Datos: 1) Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por Valor Arboles Binarios

Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Contenido del Tema

6.1. Introducción6.2. Pilas6.3. Colas6.4. Listas6.5. Arboles Binarios. Arboles Binarios de Búsqueda6.6. Otras Estructuras.

Metodología de la Programación. Curso 2002/03. Pág. 1

Metodología de la Programación. Curso 2002/03. Pág. 2

Objetivos• Especificación e Implementación de nuevas

estructuras de datos Técnica: Abstracción deDatos

• Tipos de Estructuras de Datos:1) Datos organizados por Posición Pilas , Colas

y Listas2) Datos organizados por Valor Arboles Binarios

Page 2: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 3

• Estudio de las Estructuras de Datos: DefiniciónDefinición de la Estructura de Datos e

identificación de su Conjunto de Conjunto de OperacionesOperaciones

Desarrollo de diversas ImplementacionesImplementacionesPresentación de AplicacionesAplicaciones

Metodología de la Programación. Curso 2002/03. Pág. 4

DefiniciónDefinición•• Pila:Pila: Grupo Ordenado, (de

acuerdo al tiempo que llevanen la pila) de ElementosHomogéneos (todos delmismo tipo).

•• Acceso a la Pila:Acceso a la Pila: añadir yeliminar elementos, SÓLO através de la CABEZA de laPila

• Estructura LIFOLIFO (LLast InputFirst Output)

Pila

Cabeza

Añadir Eliminar

Page 3: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 5

Conjunto de OperacionesConjunto de OperacionesMÓDULO MPila

DEFINICIÓN

TIPOS

TElemento= // cualquier tipo de datos

TPila= // por definir

PROC MeterPila(↓↑pila:TPila; ↓elem: TElemento)

// Añade un elemento por la cabeza de la pila

PROC SacarPila(↓↑pila:TPila;↑elem:TElemento)// Saca un elemento por la cabeza de la Pila

Metodología de la Programación. Curso 2002/03. Pág. 6

Conjunto de OperacionesConjunto de OperacionesFUNC CrearPila():TPila

// Crea una pila vacía

FUNC PilaVacia (↓pila :TPila):LÓGICO

// Nos dice si una pila está vacía

FUNC PilaLlena(↓pila:TPila):LÓGICO// Nos dice si una pila está llena.

PROC DestruirPila(↓↑ pila:TPila)

// Destruye una pila previamente creada

Fin

Page 4: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 7

ImplementaciónImplementación1) Con un Array• Array estructura adecuada Elementos Homogéneos• Elementos almacenados de forma Secuencial

CONSTANTES

MAXPILA ← 100

TIPOS

TElemento = ENTERO

TPila = ARRAY[1..MAXPILA]DE TElemento

Metodología de la Programación. Curso 2002/03. Pág. 8

Sólo es posible acceder a la Cabeza de la Pila

¿ Cómo es posible conocer la posición de la cabeza?

1) Variable entera “cabeza” Inconveniente: se ha de pasarcomo parámetro adicional a todas las operaciones sobre lapila

2) Extender el array, en pila[0] almacenaremos el índice del elemento que ocupa la cabeza actual

Page 5: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 9

CONSTANTES

CABEZA ← 0

MAXPILA ← 100

TIPOS

TPila = ARRAY[CABEZA..MAXPILA] DE TElemento

[0] [1] [2] [3][0] [1] [2] [3] [99] [100][99] [100]

CabezaCabeza

33 55 33 22 ..............

BasuraBasura

223355

CabezaCabeza

Metodología de la Programación. Curso 2002/03. Pág. 10

• Inconveniente: Solo es posible implementar una pila deenteros (no de cualquier otro tipo de datos)

• Solución: CONSTANTESMAXPILA ← 100

TIPOSTElemento= // cualquier tipo de datosTPila=REGISTRO

Cabeza: NATURALElementos: ARRAY[1..MAXPILA] DE TElemento

1 1 2 2 k k MAXPILAMAXPILA55 1313 88kk

CabezaCabeza ElementosElementos

Page 6: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 11

IMPLEMENTACIÓN

FUNC CrearPila():TPila

VARIABLES

pila:TPila

INICIO

pila.Cabeza ← 0

RESULTADO ← pila

FIN

FUNC PilaVacia(↓pila:TPila):LÓGICO

INICIO

RESULTADO←pila.Cabeza=0

FIN

FUNC PilaLlena(↓pila:TPila

):LÓGICO

INICIO

RESULTADO ←(pila.Cabeza= MAXPILA)

FIN

PROC DestruirPila(↓↑pila:TPila)INICIO

// No hay que hacer nada.

FIN

Metodología de la Programación. Curso 2002/03. Pág. 12

PROC SacarPila(↓↑pila:TPila;

↑elem:TElemento)INICIO

elem ← pila.Elementos[pila.Cabeza]

pila.Cabeza←pila.Cabeza-1

FIN

/* precondición:

la pila no ha de estar vacía

*/

PROC MeterPila(↓↑pila:TPila;

↓elem :TElemento)

INICIO

pila.Cabeza←pila.Cabeza+1

pila.Elementos

[pila.Cabeza] ← elem

FIN

/* precondición:la pila no ha de estar llena

*/

Page 7: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 13

PROC MeterPila (↓↑pila:TPila;↓elem:TElemento;↑llena : LÓGICO)

Inicio

llena ←PilaLlena(pila)

SI (¬llena) ENTONCES

pila.Cabeza← pila.Cabeza + 1

pila.Elementos

[pila.Cabeza] ← elem

FINSI

Fin

/* Sin Precondición.Introduceun elemento en la pila sino está llena */

PROC SacarPila(↓↑pila:TPila ;↑elem:TElemento;↑vacia:LÓGICO)

INICIO

vacia ← PilaVacia(pila)

SI ¬¬¬¬vacia ENTONCES

elem←pila.Elementos[pila.Cabeza]

pila.Cabeza ←pila.Cabeza-1

FINSI

FIN

/* Sin precondición. Saca unelemento de la pila si no estávacía*/

Metodología de la Programación. Curso 2002/03. Pág. 14

2) Con una Lista Enlazada de Punteros• Comienzo de una lista enlazada Cabeza de la PilaTIPOS

TElemento= // cualquier tipo de datosTPila = PUNTERO A TNodoPilaTNodoPila = REGISTRO

dato:TElementosig: TPila

FINREGISTRO

1010 88

cabezacabeza

101088

Page 8: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 15

PROC MeterPila(↓↑pila:TPila;↑elem: TElemento;↑llena: LÓGICO)

VARIABLES

nuevonodo : TPila

INICIO

llena ← FALSO

nuevonodo ←NUEVO(TNodoPila)

nuevonodo^.dato ← elem

nuevonodo^.sig ← pila

pila ← nuevonodo

FIN

PROC SacarPila(↓↑pila:TPila;↑elem:TElemento;↑vacía: LÓGICO)

VARIABLESptr: TPila

INICIOvacía ← PilaVacía(pila)SI ¬vacía ENTONCES

elem ← pila^.dato

ptr ← pila

pila ← pila^.sigELIMINAR(ptr)

FINSIFIN

Metodología de la Programación. Curso 2002/03. Pág. 16

PROC CrearPila():TPila

INICIO

RESULTADO ← NULO

Fin

FUNC PilaVacia(pila :TPila

):LÓGICO

INICIO

RESULTADO ← (pila= NULO)

FIN

PROC DestruirPila(↓↑pila:TPila)

Variables

ptr: TPila

Inicio

MIENTRAS(pila≠ NULO)HACER

ptr ← pila

pila ← pila^.sig

ELIMINAR(ptr)

FINMIENTRAS

FIN

Page 9: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 17

AplicacionesAplicaciones•• Ejemplo1Ejemplo1: Leer una secuencia de caracteres desde teclado: Leer una secuencia de caracteres desde teclado

e imprimirla al revése imprimirla al revés•• Ejemplo2Ejemplo2: Verificar si una cadena de caracteres está: Verificar si una cadena de caracteres está

balanceada en paréntesis o nobalanceada en paréntesis o no abcabc((defgdefg((ijkijk))(l())(l(mnmn))opop))qrqr SISI

abc abc((defdef))))ghijghij((klkl)m)m NONO•• Ejemplo3Ejemplo3: Reconocimiento del Lenguaje,: Reconocimiento del Lenguaje, L={W$W´ / W es una cadena de caracteres y W´es suL={W$W´ / W es una cadena de caracteres y W´es su

inversa}inversa} (Suponemos que $ no está ni en W ni en W´)(Suponemos que $ no está ni en W ni en W´)

Metodología de la Programación. Curso 2002/03. Pág. 18

ALGORITMO InversoDESDE MPila IMPORTA

TPila, CrearPila,MeterPila, SacarPila,Pilavacia, DestruirPila

CONSTANTESENTER ← CHR(13)

TIPOSTElemento = CARÁCTER

VARIABLESc : TElementopila : TPilall,v:LÓGICO

INICIO

pila ← CrearPila()LEER(c)

MIENTRAS (c≠ENTER) ∧(¬ll) HACER

MeterPila(pila,c,ll)Leer(c)

FINMIENTRASSacarPila(pila,c,v)MIENTRAS(¬PilaVacia(pila))HACER

SacarPila(pila,c,v)Escribir(c)

FINMIENTRASDestruirPila(pila)

FIN

Page 10: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 19

ALGORITMO Balanceo

DESDE MPila IMPORTA CrearPila, TPila,MeterPila, SacarPila, PilaVacia,DestruirPila

CONSTANTESENTER ← CHR(13)

Tipos

TElemento = CARÁCTER

VARIABLES

c : TElemento

pila : TPila

bien,ll, v : LÓGICO

Inicio

pila ← CrearPila()

bien ← CIERTO

LEER(c)

MIENTRAS(bien ∧∧∧∧ (c≠ENTER)HACERSI c= ‘(’ ENTONCES

MeterPila(pila,c,ll)

bien ← ¬llEN OTRO CASO

SI c = ‘)’ ENTONCES

SacarPila(pila,c,v)

bien ← ¬vFINSI

FINSI

LEER(c)

FINMIENTRAS

SI bien ∧ PilaVacia(pila) ENTONCES

Escribir(“cadena balanceada “)

EN OTRO CASO

Escribir(“cadena no balanceada”)

FINSI

DestruirPila(pila)

FIN

Metodología de la Programación. Curso 2002/03. Pág. 20

Algoritmo Lenguaje_LDESDE MPila IMPORTA TPila,

CrearPila, MeterPila,SacarPila, DestruirPila

CONSTANTESENTER ← CHR(13)

TIPOSTElemento = CARÁCTER

VARIABLESc1, c2 : TElementopila : TPilabien, ll, v : LÓGICO

Iniciopila ← CrearPila()ll ← FALSOLEER(c1)MIENTRAS (c1=≠‘$’)∧(¬ll) HACER

MeterPila(pila,c1,ll)LEER(c1)

FINMIENTRAS

Leer(c1)

bien ← TRUEMIENTRAS (bien ∧ (c1 ≠ENTER))

HACERSacarPila(pila,c2,v)bien ← (¬v) ∧ (c1=c2)/* He podido sacar el

elemnto y conicide*/SI (bien) ENTONCESLeer(c1)

FINSIFINMIENTRASSI (bien ∧

PilaVacia(pila))ENTONCESEscribir(“ Si pertenece”)

EN OTRO CASOEscribir (“No pertenece”)

FINSIDestruirPila(pila)

FIN

Page 11: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 21

• Aplicaciones complejas que se pueden solucionar conpilas: Expresiones AlgebraicasExpresiones Algebraicas

Operadores: +, -, *, /Operandos: Letras mayúsculas

•• Notación Notación InfijaInfija::• El operador binario está situado entre sus dos operandos

A+ B• Inconveniente: Son necesarias reglas de precedencia y uso

de paréntesis para evitar ambigüedades A+B*C

Metodología de la Programación. Curso 2002/03. Pág. 22

Notación PrefijaNotación Prefija• El operador binario esta situado

justo antes de sus dosoperandos +AB

• Gramática:<expr_pref>::=<letra>|<operador>

<expr_pref><expr_pref><letra> ::= A| B ....|Z<operador> ::= + | - | * | /• Ejemplos:

A+(B*C) +A*BC(A+B)*C *+ABC

Notación PostfijaNotación Postfija• El operador binario está situado

justo después de sus dosoperandos AB+

• Gramática:<exp_post>::=<letra>|<expr_post>

<exp_post><operador><letra> ::=A| B ....|Z<operador> ::= + | - | * | /• Ejemplos:A+(B*C) ABC*+(A+B)*C AB+C*

Page 12: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 23

• Ventaja: Usando expresiones prefijas y postfijas no sonnecesarias reglas de precedencia, ni uso de paréntesis.

Las gramáticas que las generan son muy simples, y losalgoritmos que las reconocen y evaluan muy fáciles

• Ejemplo 4: Algoritmo que evalúa una expresión en notaciónPostfija1)Usaremos una pila2)La expresión postfija se almacenará en un array de caracteresy será correcta3)Los operadores serán: +, -, * y /4)Los operandos serán letras mayúsculas (a cada una lepodemos asignar un valor)

Metodología de la Programación. Curso 2002/03. Pág. 24

CONSTANTES

MAX ← 20

TIPOS

TArray = ARRAY[1..MAX] DECARÁCTER

TElemento=ENTERO

FUNC Operando(↓c:CARACTER):ENTERO

VARIABLES

res:ENTERO

INICIO

CASO c SEA

‘A’ : res ← 5

‘B’ : res ← 7

‘C’ : res ← -1

‘D’ : res ← 11

EN OTRO CASO

res ← 0

FINCASO

RESULTADO ← res

FIN

Page 13: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 25

FUNC Eval_postfija(↓exp: TArray; ↓ultimo:NATURAL):ENTERO

DESDE MPila IMPORTA TPila, CrearPila, MeterPila, SacarPila,DestruirPila

Variablespila : TPilai, op1, op2, result : ENTEROc : CARÁCTERv,ll:LÓGICO

FUNC es_operador(↓c:CARÁCTER):LÓGICOINICIO

RESULTADO ← (c=`*´) ∨ (c=`/´) ∨ (c=`+´) ∨ (c=`-´}FIN

Metodología de la Programación. Curso 2002/03. Pág. 26

Iniciopila ← CrearPila()PARA i ← 1 HASTA ultimo HACER

c ← exp[i]SI es_operador(c) ENTONCES

SacarPila(pila,op2,v)SacarPila(pila,op1,v)CASO c SEA

‘+’ :MeterPila(pila,op1+op2,ll)‘-’ : MeterPila(pila,op1-op2,ll)‘*’ : MeterPila(pila,op1*op2,ll)‘/’ : MeterPila(pila, op1/op2,ll)

FINCASOEN OTRO CASO

MeterPila(pila, Operando(c))FINSI

FINPARASacarPila(pila,result)DestruirPila(pila)RESULTADO ←←←← result

Fin

Page 14: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 27

DefiniciónDefinición• Cola: es un grupo ordenado (con respecto al tiempo que

llevan en él) de elementos homogéneos (todos del mismoTipo)

• Acceso: los elementos se añaden por un extremo (final) yse sacan por el otro extremo (frente)

• Estructura FIFO (First Input First Output)

FrenteFrente FinalFinal MeterMeterSacarSacar

Metodología de la Programación. Curso 2002/03. Pág. 28

Conjunto de OperacionesConjunto de OperacionesMODULO MCola

DEFINICIÓN

TIPOS

TElemento =// cualquier tipo de datos

TCola= // por definir

FUNC CrearCola(): TCola // Crea una cola vacia

FUNC ColaVacia(↓cola:TCola): LÓGICO

/* Operación lógica que nos dice si la colacontiene algún elemento o no*/

Page 15: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 29

FUNC ColaLlena(↓cola:TCola):LÓGICO

/* Operación lógica que nos dice si la cola estállena o no */

PROC MeterCola(↓↑cola: TCola; ↓elem: TElemento)

// Introduce un elemento al final de la cola/

PROC SacarCola(↓↑cola: TCola; ↑elem: TElemento)

// Saca un elemento del frente de la cola

PROC DestruirCola(↓↑cola:TCola)// Destruye una cola previamente creada

Fin

Metodología de la Programación. Curso 2002/03. Pág. 30

ImplementaciónImplementación1) Con un Array

• Se deja fijo el frente de la cola y se mueve el final a medida que seañaden nuevos elementos (Idem Pila)

• Las operaciones Meter, Crear, ColaVacia y ColaLlena se implementande una forma similar a sus análogas en Pilas

• La operación de Sacar es mas complicada: cada vez que saquemos unelemento de la cola se han de desplazar el resto una posición en elarray, para hacer coincidir el frente con la primera posición del array

• Ventaja Simplicidad• Inconveniente Ineficiente (colas con muchos elementos o

elementos grandes)

Page 16: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 31

• Ejemplo:

1 2 3 4 ..........1 2 3 4 ..........

1 2 3 4 ..........1 2 3 4 ..........

Final=1Final=1

1 2 3 4 ..........1 2 3 4 ..........

Meter(Cola,”A”)Meter(Cola,”A”) AA

1 2 3 4 ..........1 2 3 4 ..........

AA BBMeter(cola, “B”)Meter(cola, “B”) Final=2Final=2

Sacar(cola, Sacar(cola, elemelem)) BB

1 2 3 4 ..........1 2 3 4 ..........

BB Final=1Final=1DesplazarDesplazar

Metodología de la Programación. Curso 2002/03. Pág. 32

Solución:

• Utilizar un indice para el frente y otro para el final ypermitir que ambos fluctuen por el array

• Ventaja: operación Sacar más sencilla• Inconveniente: Es posible que final sea igual a Maxcola

(última casilla del array) y que la cola no esté llena

Page 17: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 33

• Ejemplo:

1 2 3 4 ..........1 2 3 4 ..........

1 2 3 4 ..........1 2 3 4 ..........

Meter(Cola,”A”)Meter(Cola,”A”) AA

AA BBMeter(cola, “B”)Meter(cola, “B”)

Frente=1Frente=1

Final=1Final=1

Frente=1Frente=1

Final=2Final=2

1 2 3 4 ..........1 2 3 4 ..........

AA BBMeter(cola, “C”)Meter(cola, “C”) CCFrente=1Frente=1

Final=3Final=3

1 2 3 4 ..........1 2 3 4 ..........

BBSacar(cola,Sacar(cola,elemelem)) CCFrente=2Frente=2

Final=3Final=3

Metodología de la Programación. Curso 2002/03. Pág. 34

• Solución:• Tratar al array como una Estructura CircularEstructura Circular, donde la

última posición va seguida de la primera Evitamos queel final de la cola alcance el final físico del array y no estéllena

• Operación Meter Añade elementos a las posiciones delarray e incrementa el índice final

• Operación Sacar Más sencilla. Sólo se incrementa elíndice frente a la siguiente posición

Page 18: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 35

•• Ejemplo:Ejemplo:11 22

33

4455

66

BB

HH

11 22

33

4455

66

BB

HH

11 22

33

4455

66 HHFrente=6Frente=6

Final=6Final=6Frente=5Frente=5

Final=6Final=6

11 22

33

4455

66

BB

HHMeter(cola,”G”)Meter(cola,”G”)GG Frente=5Frente=5

Final=1Final=1Frente=5Frente=5

Final=6Final=6

Sacar(cola,Sacar(cola,elemelem))

Metodología de la Programación. Curso 2002/03. Pág. 36

11 22

33

4455

66

BB

HHMeter(cola,”L”)Meter(cola,”L”)MM Frente=4Frente=4

Final=3Final=3

¿Como sabemos si la cola está vacía o llena?11 22

33

4455

66

BB

HHFrente=4Frente=4

Final=2Final=2

MM AA

SS

LLAA

SS!!Cola llena!!!!Cola llena!!

11 22

33

4455

66 BB

11 22

33

4455

66Frente=4Frente=4

Final=3Final=3Frente=3Frente=3

Final=3Final=3Sacar(cola,Sacar(cola,elemelem))

!!Cola Vacía!!!!Cola Vacía!!

Page 19: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 37

• Solución:• 1) Disponer de otra variable Contabilizará los

elementos almacenados en la colaVariable=0 Cola vacíaVariable=MaxCola Cola llena

Inconveniente: añade más procesamiento a las operacionesMeter y Sacar

• 2) Frente apunte a la casilla del array que precede a la delelemento frente de la cola Solución elegida

Metodología de la Programación. Curso 2002/03. Pág. 38

• Ejemplo:11 22

33

4455

66

BB

HHFrente=4Frente=4

Final=6Final=6

11 22

33

4455

66

BB

HHMeter(cola,”G”)Meter(cola,”G”)GG Frente=4Frente=4

Final=1Final=1

¿Como saber si la cola está llena?¿Como saber si la cola está llena? Es necesario que la posición a la Es necesario que la posición a laque apunta frente en cada momento este que apunta frente en cada momento este ReservadaReservada

Cola Llena: Cola Llena: finalfinal++1 =frente1 =frente11 22

33

4455

66

BB

HHFrente=3Frente=3

Final=2Final=2

MM AA

SS

resres

Page 20: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 39

¿Como saber si la cola está vacía?Cola Vacía: Frente = Final

• Crear la cola (inicializarla vacía): frente =Maxcola (índicedel array que precede al elemento frente de la cola) yfinal=Maxcola Cola Vacía correcto (frente = final)

11 22

33

4455

66

BB

11 22

33

4455

66Frente=5Frente=5

Final=5Final=5Frente=4Frente=4

Final=5Final=5Sacar(cola,Sacar(cola,elemelem))

resres

Metodología de la Programación. Curso 2002/03. Pág. 40

• Agrupamos en un registro los índices frente y final, juntocon el array que contendrá los elementos de la cola

CONSTANTESMAXCOLA ← 100

TIPOSTElemento = // Cualquier tipo de datosTCola = REGISTRO

elementos:ARRAY[1..MAXCOLA]DE TElementoFrente,Final : [1.. MAXCOLA]

FINREGISTRO

1 1 2 2 MaxColaMaxCola55 1313

frentefrente

finalfinal

22

MaxcolaMaxcola

Page 21: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 41

FUNC CrearCola():TCola

VARIABLES

cola: TCola

INICIO

cola.Frente ← MAXCOLA

cola.Final ← MAXCOLA

RESULTADO ← cola

FIN

PROC DestruirCola(↓↑cola:TCola)

INICIO

// No hay que hacer nada.

FIN

FUNC ColaLlena(↓cola:Tcola):LÓGICO

INICIO

RESULTADO ←(cola.Final MOD MAXCOLA)+1

= cola.Frente

FIN

FUNC ColaVacia(↓cola:Tcola):LÓGICO

INICIO

RESULTADO←←←← cola.Final =cola.Frente

FIN

Metodología de la Programación. Curso 2002/03. Pág. 42

PROC MeterCola(↓↑cola:TCola;↓elem:TElemento)

VARIABLES

fin:NATURAL

INICIO

fin ← (cola.Final MOD

MAXCOLA) + 1

cola.Final ← fin

cola.elementos[fin]←elem

FIN

PROC SacarCola(↓↑cola:TCola;↑elem:TElemento)

VARIABLES

ini:NATURAL

INICIO

ini ← (cola.Frente MODMAXCOLA) + 1

cola.Frente ← inielem←cola.elementos[ini]

FIN

Page 22: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 43

2) Con listas enlazadas con Punteros• Usamos dos variables de tipo puntero, frente y final, que

apunten a los nodos que contienen los elementos frente yfinal

• ¿Que sucedería si intercambiáramos las posiciones defrente y final en la lista enlazada?

1010 88 44

FrenteFrente FinalFinal

Metodología de la Programación. Curso 2002/03. Pág. 44

• Agrupamos las variables frente y final en un registroTIPOS

TElemento = // cualquier tipo de datosTPuntero = PUNTERO A TNodoTNodo = REGISTRO

valor : TElementosig : TPuntero

FINREGISTROTCola = REGISTRO

Frente : TPunteroFinal : TPuntero

FINREGISTRO

1010 8833

FrenteFrente FinalFinal

Page 23: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 45

FUNC CrearCola(): TCola

VARIABLES

cola:TCola

INICIO

cola.Frente ← NULO

cola.Final ← NULO

RESULTADO ← cola

FIN

FUNC ColaVacia(↓cola:TCola):LÓGICO

INICIO

RESULTADO ←cola.Frente = NULO

FIN

PROC DestruirCola(↓↑cola:TCola)

Variables

nodo,sgte: TPuntero

Inicio

SI(cola.Frente≠NULO) ENTONCES

sgte ← cola.Frente

MIENTRAS (sgte≠NULO) HACER

nodo ← sgte

sgte ← sgte^.sigELIMINAR(nodo)

FINMIENTRAS

FINSI

cola.Frente ← NULO

cola.Final ← NULOFIN

Metodología de la Programación. Curso 2002/03. Pág. 46

PROC MeterCola(↓↑cola:TCola;↓elem:TElemento)

VARIABLESptr: TPuntero

Inicioptr ← NUEVO(TNodo)ptr^.valor ← elemptr^sig ← NULOSI ColaVacia(cola)

ENTONCEScola.Frente ← ptr

EN OTRO CASOcola.Final^.sig ← ptr

FINSIcola.Final ← nuevonodo

FIN

PROC SacarCola (↓↑cola:TCola;↑elem:TElemento)

VARIABLES

temp : TipoPuntero

INICIO

temp ← cola.Frente

elem ← cola.Frente^.valor

cola.Frente ←cola.Frente^.sig

SI (cola.Frente=NULO)

ENTONCES

cola.Final ← NULOFINSI

ELIMINAR(temp)

FIN

Page 24: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 47

Ejemplo: Reconocimiento del lenguaje. L={W$W/W es una cadena que no contiene a$}Algoritmo Lenguaje_LDESDE MCola IMPORTA TCola, CrearCola, ColaVacia, SacarCola,

MeterCola, DestruirColaCONSTANTES

ENTER ← CHR(13)TIPOS

TElemento = CARÁCTERVARIABLES

bien : LÓGICOc1,c2 : TElementocola : TCola

INICIOcola ← CrearCola()LEER(c1)MIENTRAS (c1 ≠ ‘$’) HACER

MeterCola(cola,c1)LEER(c1)

FINMIENTRAS

Metodología de la Programación. Curso 2002/03. Pág. 48

Leer(c1)bien ← CIERTOMIENTRAS (bien ∧ (c1≠ENTER) HACER

SI ColaVacia(cola) ENTONCESbien ← FALSE

EN OTRO CASOSacarCola(cola,c2)SI (c1 ≠c2) ENTONCES

bien ← FALSEEN OTRO CASO

LEER(c1)FINSI

FINSIFINMIENTRASSI (bien ∧ ColaVacia(cola)) ENTONCES

Escribir(“Pertenece”)EN OTRO CASO

Escribir(“No pertenece”)FINSIDestruirCola(cola)

FIN

Page 25: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 49

• Definición de lista

• Implementación - Estática

- Dinámica

Metodología de la Programación. Curso 2002/03. Pág. 50

• Definición: Una lista es una colección de elementoshomogéneos (del mismo tipo), con una relación lineal entreellos.

• Los elementos pueden o no estar ordenados con respecto aalgún valor y se puede acceder a cualquier elemento de lalista.

• En realidad, las pilas y colas vistas en secciones anterioresson listas, con algunas restricciones.

Page 26: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 51

Operaciones sobre listas:Crear

¿Esta vacía?

¿Está llena?

Insertar un elemento

Eliminar un elemento

Imprimir

Destruir

- De forma ordenada

- De forma no ordenada

Metodología de la Programación. Curso 2002/03. Pág. 52

MÓDULO Mlistas

DEFINICIÓN

TIPOS

TElemento =// cualquier tipo de datos

TLista = // por definirFUNC CrearLista():TLista

FUNC ListaVacia(↓lista:TLista): LÓGICO

FUNC ListaLlena(↓lista:TLista): LÓGICO

PROC InsertarLista(↓↑lista:TLista; ↓elem:TElemento)PROC EliminarLista(↓↑Lista:TLista; ↓elem:TElemento)PROC ImprimirLista(lista:TLista)

PROC DestruirLista(↓↑lista: TLista)

IMPLEMENTACIÓN

..............

Fin

Page 27: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 53

• Implementación:

– Representación secuencial

– Representación enlazada - Dinámica

- Estática

Metodología de la Programación. Curso 2002/03. Pág. 54

Dinámicas

• Utilizaremos punteros para crear la lista enlazada deelementos.

• Las definiciones de tipos y la implementación de lasoperaciones se han visto.

Page 28: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 55

Estáticas• Array de registros:

• Elemento.• Enlace al siguiente elemento.

• Los registros pueden almacenarse en cualquier ordenfísico y se enlazarán a través del campo enlace.

Metodología de la Programación. Curso 2002/03. Pág. 56

Page 29: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 57

• Inconveniente Variable estática Elección de Tamaño Máximo

• Debemos escribir nuestros propios algoritmos de manejo de memoria

No disponemos de NUEVONUEVO y ELIMINARELIMINAR.

• En el array de registros coexistirán dos listas:- Nuestra lista enlazada de elementos.- Una lista enlazada con el espacio libre disponible.

Metodología de la Programación. Curso 2002/03. Pág. 58

Page 30: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 59

Consideraciones• El cero (o cualquier otro valor distinto de [1..10]) hará las

funciones de NULONULO en las listas enlazadas con punteros.• Cuando no existe ningún elemento en la lista (lista vacía)

sólo existirá la lista libre, que enlaza todas las posicionesdel array.

• Si la lista se llena, no tendremos lista libre.• Para simular el manejo de memoria real mediante

asignación dinámica de memoria, consideramos el array yla variable LibreLibre como globales al módulo deimplementación de la lista.

MÓDULO Mlistas

DEFINICIÓN

CONSTANTES

VALOR_NULO ← 0 // Hace las funciones de NULO

MAX ← 100

TIPOS

TLista = [0..Max]

TElemento = // cualquier tipo de datos

TNodo = REGISTRO

elemento : TElemento

sig : TLista

FINREGISTRO

FUNC CrearLista():TLista

FUNC ListaVacia(↓lista:TLista): LÓGICO

PROC ListaLlena(↓lista: TLista): LÓGICO

PROC ImprimirLista(↓lista: TLista)

PROC InsertarLista(↓↑lista:TLista; ↓elem:TElemento)PROC EliminarLista(↓↑lista:TLista; ↓elem:TElemento)PROC DestruirLista(↓↑lista:TLista)

Metodología de la Programación. Curso 2002/03. Pág. 60

Page 31: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

IMPLEMENTACIÓN

TIPOS

TMemoria = ARRAY [1..MAX] DE TNodo

VARIABLES

memoria : TMemoria

libre : TLista

FUNC CrearLista():TLista

INICIO

RESULTADO ←←←← VALOR_NULOFIN

FUNC ListaVacia(↓lista:TLista): LÓGICO

INICIO

RESULTADO ←←←← (lista = VALOR_NULO)FIN

FUNC ListaLlena(↓lista:TLista):LÓGICOINICIO

RESULTADO ←←←← (libre = VALOR_NULO)FIN

Metodología de la Programación. Curso 2002/03. Pág. 61

FUNC NuevoNodo(): Tlista

VARIABLES

ptr: TLista

INICIO

ptr ← libre

SI (ptr ≠ Nulo) ENTONCES

libre ← memoria[ptr]. sigFINSI

RESULTADO ← ptrFIN

PROC EliminarNodo (↓↑p : TLista)INICIO

memoria[p].sig ← libre

lbre ← p

p ← VALOR_NULOFIN

Para los procedimientos InsertarListaInsertarLista y EliminarLista, necesitamosantes implementar las operaciones (NuevoNodo, EliminarNodo)equivalentes a las que usamos al trabajar con memoriadinámica.

Metodología de la Programación. Curso 2002/03. Pág. 62

Page 32: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

PROC ImprimirLista(↓lista : TLista)

VARIABLES

ptr : TLista

INICIO

ptr ← lista

MIENTRAS (ptr ≠ VALOR_NULO) HACER

Escribir(memoria[ptr].elemento)

ptr ← memoria[ptr].sig

FINMIENTRAS

FIN

PROC InsertarLista(↓↑lista: TLista; ↓elem: TElemento)

VARIABLES

ptr : TLista

INICIO

ptr ← NuevoNodo()

SI (ptr ≠ VALOR_NULO) ENTONCES

memoria[ptr].elemento ← elem

memoria[ptr].sig ← lista

lista ← ptr

FINSI

FIN

Depende de TElemento

Metodología de la Programación. Curso 2002/03. Pág. 63

PROC EliminarLista (↓↑lista: TLista; ↓elem :TElemento)

VARIABLES

pav, pret : TLista

INICIO

pav ← lista // puntero avanzado

pret ← Nulo // puntero retrasado

MIENTRAS (memoria[pav].elemento ≠ elem) HACER

pret ← pav

pav ← memoria[pav].sig

FINMIENTRAS

SI (pret = VALOR_NULO) ENTONCES

lista ← memoria[lista].sig

EN OTRO CASO

memoria[pret].sig ← memoria[pav].sig

FINSI

EliminarNodo(pav)

Fin

Suponemos que elelemento a borrar

está en la lista

Metodología de la Programación. Curso 2002/03. Pág. 64

Page 33: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

PROC DestruirLista(↓↑lista: TLista)

Variables

aux: TLista

INICIO

MIENTRAS (lista ≠ VALOR_NULO) HACER

aux ← lista

lista ← memoria[lista].sig

EliminarNodo(aux)

FIN

FIN

INICIO // Mlista

Libre ← 1

PARA ptr ← 1 HASTA (Max-1) HACER

memoria[ptr].sig ← ptr + 1

FINPARA

memoria[Max].enlace ← VALOR_NULO

FIN // Mlista

Metodología de la Programación. Curso 2002/03. Pág. 65

Metodología de la Programación. Curso 2002/03. Pág. 66

• Implementación estática o dinámica.

• El campo de enlace del último nodo apunta al primer nodode la lista, en lugar de tener el valor NULO.NULO.

• No existe ni primer ni último nodo. Tenemos un anillo deelementos enlazados unos con otros.

Page 34: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 67

• Es conveniente, aunque no necesario, tener un enlace(puntero o índice) al último nodo lógico de la lista. Asípodemos acceder facilmente a ambos extremos de lamisma.

• Una lista circular vacía vendrá representada por un valorNULO (o VALOR_NULO).

p

Metodología de la Programación. Curso 2002/03. Pág. 68

Ejemplo: (usando una implementación estática)Ejemplo: (usando una implementación estática)PROC ImprimirLista(↓lista:TLista)VARIABLESptr : TLista

INICIOptr ← listaSI (ptr ≠ VALOR_NULO) ENTONCES

REPETIREscribir(memoria[ptr].elemento)ptr ← memoria[ptr].sig

HASTA QUE ptr = listaFINSI

Fin

Page 35: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 69

• Con una lista enlazada circular es muy fácil implementaruna Cola, sin tener que disponer de un registro con doscampos para el frente y para el final.

p

Frente Final

ImplementaciónImplementación

Metodología de la Programación. Curso 2002/03. Pág. 70

• Es una lista enlazada en la que cada nodo tiene al menostres campos:

- Elemento. El dato de la lista.- Enlace al nodo anterior.- Enlace al nodo siguiente.

• Los algoritmos para las operaciones sobre listasdoblemente enlazadas son normalmente más complicados.

• Pueden ser recorridas fácilmente en ambos sentidos.

ImplementaciónImplementaciónlista

Page 36: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 71

• Una lista doblemente enlazada puede modificarse paraobtener una estructura circular de la misma

ImplementaciónImplementación

lista

Metodología de la Programación. Curso 2002/03. Pág. 72

NIVEL DE UTILIZACIÓN

• Estructura muy utilizada.

•• Ejemplo:Ejemplo:

Manejo de tablas hash con el método de encadenamiento parael tratamiento de sinónimos.– Utilizaríamos un array de listas como tabla hash. (Lo que en el

primer tema se llamó Encadenamiento)

– Las listas tienen como elementos cadenas de caracteres.

Page 37: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Modulo Mhash

DEFINICIÓN

DESDE MLista IMPORTA Tlista

CONSTANTES

MAXCAD ← 20

MAXELE ← 100

TIPOS

TCadena = ARRAY [0..MAXCAD-1] DE CARÁCTER

TElemento = TCadena

TRango = [0.. MAXELE-1]

TTablaHash= ARRAY TRango DE TLista

PROC Almacenamiento(↓↑tabla:TTablaHash; ↓dato:TElemento)

FUNC Búsqueda(↓tabla:TTablaHash; ↓dato:TElemento):LÓGICO

PROC Eliminación(↓↑tabla:TTablaHash; ↓dato:TElemento)

Metodología de la Programación. Curso 2002/03. Pág. 73

IMPLEMENTACIÓN

PROC Almacenamiento(↓↑tabla:TTablaHash; ↓dato:TElemento)

INICIO

Insertar(tabla[Hash(dato)],dato)

FIN

FUNC Búsqueda(↓tabla:TTablaHash; ↓dato:TElemento):LÓGICOINICIO

RESULTADO ← Buscar(tabla[Hash(dato)],dato)

FIN

PROC Eliminación(↓↑tabla:TTablaHash; ↓dato:TElemento)INICIO

Eliminar(tabla[Hash(dato)],dato)

FIN

Fin /* Mhash */

Metodología de la Programación. Curso 2002/03. Pág. 74

Page 38: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 75

• Definición: es un conjunto finito de elementos que estávacío o está partido en tres subconjuntos disjuntos.– El primer subconjunto contiene un único elemento llamado

la raízraíz del árbol binario.– Los otros dos subconjuntos son a su vez árboles binarios,

llamados subárbolessubárboles izquierdoizquierdo y derechoderecho.

• El subárbol izquierdo o derecho puede estar vacío.

• Cada elemento de un árbol binario se denomina nodonodo.

Metodología de la Programación. Curso 2002/03. Pág. 76

• Un método convencional para representar gráficamente unárbol binario es:

A

B C

D E F

G H I

•Consta de 9 nodos.

•• AA es el nodo raiz.

•El subárbol izquierdo tienecomo nodo raiz BB.

•El subárbol derecho tiene CCcomo raiz.

•La ausencia de ramas indicaun árbol vacío.

Page 39: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 77

• Si AA es la raíz de un árbol binario y BB es la raíz de su subárbol izquierdo oderecho, se dice que AA es el padrepadre de BB y BB es el hijohijo izquierdoizquierdo oderechoderecho de AA.

• Un nodo que no tiene hijos se denomina nodo hojahoja.

• Un nodo n1n1 es un antecesorantecesor de un nodo n2n2 (y n2n2 es un descendientedescendiente den1n1) si n1n1 es el padre de n2n2 o el padre de algún antecesor de n2n2.

• Un nodo n2n2 es un descendientedescendiente izquierdoizquierdo de un nodo n1n1 si n2n2 es el hijoizquierdo de n1n1 o un descendiente del hijo izquierdo de n1n1. Undescendientedescendiente derechoderecho se puede definir de forma similar.

• Dos nodos son hermanoshermanos si son los hijos izquierdo y derecho del mismopadre.

Metodología de la Programación. Curso 2002/03. Pág. 78

•• Árbol Árbol estrictamenteestrictamente binario binario: árbol binario en que cada nodono-hoja tiene subárboles izquierdo y derecho no vacíos.

•• NivelNivel de un nodo en un árbol binario de un nodo en un árbol binario: La raíz tiene nivel 0, yel nivel de cualquier otro nodo en el árbol es uno más que elnivel de su padre.

•• ProfundidadProfundidad de un árbol binario de un árbol binario: máximo nivel de cualquierhoja del árbol.

•• Árbol binario Árbol binario completocompleto de profundidad de profundidad dd: árbol estrictamentebinario con todas sus hojas con nivel d.

la longitud del camino más largodesde la raiz hasta una hoja.

Page 40: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 79

Un árbol binario contiene m nodos en el nivel L.

Contiene como máximo 2mnodos en el nivel L+1.

Puede contener como máximo2L nodos en el nivel L

Un árbol binario completo deprofunfidad d contiene

exactamente 2L nodos en cadanivel L, entre 0 y d

El número total de nodos en un árbolbinario completo de profundidad d

es:

tn = 20 + 21 + 22 + ... + 2d = 2d+1 - 1

Metodología de la Programación. Curso 2002/03. Pág. 80

Árbol ternario: conjunto finito de elementos que está vacío oestá partido en cuatro subconjuntos disjuntos.

– El primer subconjunto contiene un único elemento llamado la raíz delárbol.

– Los otros tres subconjuntos son a su vez árboles.

Árbol n-ario: conjunto finito de elementos que está vacío o estápartido en n+1 subconjuntos disjuntos.

– El primer subconjunto contiene un único elemento llamado la raíz delárbol.

– Los otros n subconjuntos son a su vez árboles.

Page 41: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 81

¿Esta vacío?

¿Está lleno?

Devolver el contenido del nodo raíz

Devolver el subárbol derecho

Devolver el subárbol derecho

Destruir

Operaciones sobre árboles:

Crear árbol vacío

Crear árbol dada su raíz,

y sus hijos derecho

e Izquierdo

Módulo MArbolBin

DEFINICIÓN

TIPOS

TElemento = // Cualquier tipo de datos

TArbolBin = PUNTERO A TNodoArbolBin

TNodoArbolBin = REGISTRO

dato : TElemento

izq,der : TArbolBin

FINREGISTRO

FUNC CrearArbolVacio():TArbolBin

FUNC CrearArbol(↓raiz:TElemento;↓izq, ↓dch: TArbolBin): TArbolBin

FUNC ArbolVacio(↓arbol:TArbolBin):LÓGICOFUNC Info(↓arbol:TArbolBin):TElementoFUNC Izq(↓arbol:TArbolBin): TArbolBin

FUNC Der(↓arbol: TArbolBin): TArbolBin

PROC DestruirArbol(↓↑arbol: TArbolBin)

Implementación dinámica

Metodología de la Programación. Curso 2002/03. Pág. 82

Page 42: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

IMPLEMENTACIÓN

FUNC CrearArbolVacio():TArbolBin

INICIO

RESULTADO ← NULO

FIN

FUNC CrearArbol(↓raiz:TElemento;↓izq, ↓dch: TArbolBin

): TArbolBin

VARIABLES

arbol : TArbolBin

INICIO

arbol ← NUEVO(TNodoArbolBin)

arbol^.dato ← raiz

arbol^.izq ← izq

arbol^.der ← dch

RESULTADO ← arbol

FIN

Metodología de la Programación. Curso 2002/03. Pág. 83

FUNC ArbolVacio(↓arbol:TArbolBin):LÓGICOINICIO

RESULTADO ← (arbol = NULO)

FIN

FUNC Info(↓arbol:TArbolBin):TElementoINICIO

RESULTADO ← arbol^.dato

FIN

FUNC Izq(↓arbol:TArbolBin): TArbolBin

INICIO

RESULTADO ← arbol^.izq

FIN

FUNC Der(↓arbol: TArbolBin): TArbolBin

INICIO

RESULTADO ← arbol^.der

FIN

Metodología de la Programación. Curso 2002/03. Pág. 84

Page 43: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

PROC DestruirArbol(↓↑arbol: TArbolBin)

INICIO

SI (¬ArbolVacio(arbol)) ENTONCES

DestruirArbol(arbol^.der)

DestruirArbol(arbol^.izq)

ELIMINAR(arbol)

FINSI

FIN

FIN // MArbolBin

Metodología de la Programación. Curso 2002/03. Pág. 85

Módulo MArbolBinEstático

DEFINICIÖNCONSTANTES

VALOR_NULO ← 0

MAX ← 100

TIPOS

TArbolBin = [0..MAX]

TNodoArbolBin = REGISTRO

dato : TElemento

izq,der : TArbolBin

FINREGISTRO

FUNC CrearArbolVacio():TArbolBin

FUNC CrearArbol(↓raiz:TElemento;↓izq, ↓dch: TArbolBin): TArbolBin

FUNC ArbolVacio(↓arbol:TArbolBin):LÓGICOFUNC Info(↓arbol:TArbolBin):TElementoFUNC Izq(↓arbol:TArbolBin): TArbolBin

FUNC Der(↓arbol: TArbolBin): TArbolBin

PROC DestruirArbol(↓↑arbol: TArbolBin)

Implementación estática

Se deja propuesto como ejercicio la Se deja propuesto como ejercicio la parte de implementación de los parte de implementación de los procedimientos y funciones de una procedimientos y funciones de una implementación estática de un implementación estática de un árbol binarioárbol binario

Metodología de la Programación. Curso 2002/03. Pág. 86

Page 44: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 87

NIVEL DE UTILIZACIÓN• Estructura de datos muy útil cuando se deben tomar decisiones de "dos

caminos”• Muy utilizado en aplicaciones relacionadas con expresiones

aritméticas.

Ejemplos:Ejemplos:

+

5 2

(12-3)*(4+1)

5 + 2

*

- +

12 3 4 1

Metodología de la Programación. Curso 2002/03. Pág. 88

Ejemplo:Ejemplo:

Tipos

TipoDecision = (Operador, Operando)

TElemento = REGISTRO

CASO contenido:TipoDecision SEA

Operador:

oper: CARÁCTER

Operando:

val: REAL

FINCASO

FINREGISTRO

Diseñemos un algoritmo para evaluar una expresiónaritmética que está almacenada en un árbol binario.

Page 45: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

FUNC Eval(↓arbol:TArbolBin):REALVARIABLES

dato:TElemento;

result: REAL

INICIO

dato ← Info(arbol)

SI (dato.contenido = Operando) ENTONCES

result ← dato.val

EN OTRO CASO

CASO dato.oper SEA

'+': result ← Eval(Izq(arbol))+Eval(Der(arbol))

'-': result ← Eval(Izq(arbol))-Eval(Der(arbol))

'*': result ← Eval(Izq(arbol))*Eval(Der(arbol))

'/': result ← Eval(Izq(arbol))/Eval(Der(arbol))

FINCASO

FINSI

RESULTADO ← result

Fin

Metodología de la Programación. Curso 2002/03. Pág. 89

Metodología de la Programación. Curso 2002/03. Pág. 90

La estructura lista enlazada es lineal ¿Búsqueda?

La estructura árbol ¿Búsqueda más eficiente?

Siempre que los datos sedistribuyan de forma adecuada

Árbol binario de búsqueda

Page 46: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 91

• Definición: árbol binario en el que el subárbolizquierdo de cualquier nodo (si no está vacío) contienevalores menores que el que contiene dicho nodo, y elsubárbol derecho (si no está vacío) contiene valoresmayores.

Ejemplo: Ejemplo: H

F

E

B

A D

C

I

G

Metodología de la Programación. Curso 2002/03. Pág. 92

Operaciones:

CrearBuscarInsertarSuprimirImprimir

Las definidas para unárbol binario general

Page 47: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Módulo MABBDefinición

TIPOS

TRecorrido = (InOrden,PreOrden,PostOrden)

TClave = ENTERO

TElemento = REGISTRO

clave:TClave.........

FINREGISTRO

TABB = PUNTERO A TNodoABB

TNodoABB = REGISTRO

izq,der:TABB

elem:TElemento

FINREGISTRO

// Operaciones típicas de los árboles

FUNC CrearABB():TABB

FUNC ABBVacio(↓arbol:TABB):LÓGICOFUNC InfoABB(↓arbol:TABB):TElementoFUNC IzqABB(↓arbol:TABB): TABB

FUNC DerABB(↓arbol: TABB): TABB

PROC DestruirABB(↓↑arbol: TABB)

Metodología de la Programación. Curso 2002/03. Pág. 93

// Operaciones Exclusivas de los árboles binarios de búsqueda

PROC BuscarABB(↓arbol:TABB; ↓c:TClave; ↑dato:TElemento;↑EnArbol:LÓGICO)

PROC InsertarABB(↓↑arbol:TABB; ↓dato:TElemento)

PROC SuprimirABB(↓↑arbol:TABB; ↓c:TClave)PROC ImprimirABB(↓arbol:TABB; ↓rec:TRecorrido)

IMPLEMENTACIÓN

FUNC CrearABB():TABB

INICIO

RESULTADO ← NULO

FIN

FUNC ABBVacio(↓arbol:TABB):LÓGICOINICIO

RESULTADO ← (arbol = NULO)

FIN

FUNC InfoABB(↓arbol:TABB):TElementoINICIO

RESULTADO ← arbol^.dato

FIN

Metodología de la Programación. Curso 2002/03. Pág. 94

Page 48: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

FUNC IzqABB(↓arbol:TABB): TABB

INICIO

RESULTADO ← arbol^.izq

FIN

FUNC DerABB(↓arbol: TABB): TABB

INICIO

RESULTADO ← arbol^.der

FIN

PROC DestruirABB(↓↑arbol: TABB)

INICIO

DestruirABB(arbol^.izq)

DestruirABB(arbol^.dch)ELIMINAR(arbol)

FIN

Metodología de la Programación. Curso 2002/03. Pág. 95

PROC BuscarABB(↓arbol:TABB; ↓c:TClave; ↑dato:TElemento;↑EnArbol:LÓGICO)

// Solución Iterativa

VARIABLES

ptrArbol: TABB

ele:TElemento

INICIO

EnArbol ← FALSO

ptrArbol ← arbol

MIENTRAS ((¬ABBVacio(ptrArbol)) ∧ (¬EnArbol)) HACER

ele = InfoABB(ptrArbol)

SI (ele.clave = c) ENTONCES

EnArbol ← CIERTO

dato ← ele

SINO SI (c < ele.clave) ENTONCES

ptrArbol ← IzqABB(ptrArbol)

EN OTRO CASO

ptrArbol ← DechABB(ptrArbol)

FINSI

FINMIENTRAS

FIN

Metodología de la Programación. Curso 2002/03. Pág. 96

Page 49: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

PROC BuscarABB(↓arbol:TABB; ↓c:TClave; ↑dato:TElemento;↑EnArbol:LÓGICO)

// Solución Recursiva

VARIABLES

ele:TElemento

INICIO

SI (ABBVacio(arbol)) ENTONCES

EnArbol ← FALSO

EN OTRO CASO

ele = InfoABB(arbol)

SI (ele.clave = c) ENTONCES

EnArbol ← CIERTO

dato ← ele

SINO SI (c < ele.clave ) ENTONCES

BuscarABB(IzqABB(arbol),c,dato,EnArbol)

EN OTRO CASO

BuscarABB(DechABB(arbol),c,dato,EnArbol)

FINSI

FINSI

FIN

Metodología de la Programación. Curso 2002/03. Pág. 97

Metodología de la Programación. Curso 2002/03. Pág. 98

Consideraciones acerca de la operación de inserción.

F

E

D

B

A C G

D

C

B

A

F

G

E

B

A

D

C

F

E

G

Los mismos datos, insertados en ordendiferente, producirán árboles conformas o distribuciones de elementosmuy distintas.

Entrada: ABCDEFG

Entrada: DBFACEG

Entrada: BADCGFE

Page 50: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 99

PROC InsertarABB(↓↑arbol:TABB; ↓dato:TElemento)// Solución Iterativa

VARIABLES

nuevonodo,pav,pret:TABB

clavenueva:Tclave

ele:TElemento

Inicio

nuevonodo ← NUEVO(TNodoABB)

nuevonodo^.izq ← NULO

nuevonodo^.der ← NULO

nuevonodo^.elem ← dato

clavenueva ← dato.clave

pav ← arbol // Puntero Avanzado

pret ← NULO // Puntero Retrasado

Metodología de la Programación. Curso 2002/03. Pág. 100

MIENTRAS (pav ≠ NULO) HACER

pret ← pav

ele = pav^.elem

SI (clavenueva < ele.clave ) ENTONCES

pav ← pav^.izq // Voy hacia el hijo izquierdo

EN OTRO CASO

pav ← pav^.dch // Voy hacia el hijo derecho

FINSI

FINMIENTRAS

ele = pret^.elem

SI (clavenueva < ele.clave ) ENTONCES

pret ^.izq ← nuevonodo // Inserto en el hijo izquierdo

EN OTRO CASO

pret ^.dch ← nuevonodo // Inserto en el hijo izquierdo

FINSI

FIN

Page 51: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 101

PROC InsertarABB(↓↑arbol:TABB; ↓dato:TElemento)VARIABLES

ele:TElementoINICIO // Solución Recursiva

SI (ABBVacio(arbol)) ENTONCESarbol ← NUEVO(TNodoABB)arbol^.izq ← NULOarbol^.der ← NULOarbol^.elem ← dato

EN OTRO CASOele = InfoABB(arbol)SI (dato.clave < ele.clave) ENTONCES

InsertarABB(arbol^.izq, dato)EN OTRO CASO

InsertarABB(arbol^.dch, dato)FINSI

FINSIFIN

¿Por qué usamos ¿Por qué usamos arbol^.izqy y arbol^.dch en vez de en vez de IzqABB(arbol) y y DechABB(arbol)??

Metodología de la Programación. Curso 2002/03. Pág. 102

Consideraciones acerca de la operación de suprimir.• Pasos:

1) Encontrar el nodo a suprimir. Equivalente a Buscar

2) Eliminarlo del árbol. 3 casos

padre de x

x

ex-padre de x

Caso 1

Page 52: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 103

Caso 2

padre de x

x

hijo de x

ex-padre de x

ex-hijo de x

Q

L

J

B

N

R

M

K

P

Z

P

L

J

B

N

R

M

K

Caso 3z

Eliminar Q

PROC SuprimirABB(↓↑arbol:TABB; ↓c:TClave)VARIABLES // Solución Iterativa

pav,pret:TABBINICIO

pav ← arbolpret ← NULO //Busco el elementoMIENTRAS (pav ≠ NULO) ∧ (pav^.elem.clave ≠ c) HACER

pret ← pavSI (c < pav^.elem.clave) ENTONCES

pav ← pav^.izqEN OTRO CASO

pav ← pav^.derFINSI

FINMIENTRASSI (pav = NULO) ENTONCES

// No hacer Nada, ya que no hay nada que borrarSINO SI (pav = arbol) ENTONCES // equivalente a: (pret = NULO)

SuprimirNodo(arbol)SINO SI (pret^.izq = pav) ENTONCES

SuprimirNodo(pret^.izq)EN OTRO CASO

SuprimirNodo(pret^.der)FINSI

FIN

Metodología de la Programación. Curso 2002/03. Pág. 104

Page 53: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

PROC SuprimirNodo(↓↑arbol:TABB)Variables // Solución Iterativa

temp,ant:TABB

Inicio

temp ← arbol

SI (arbol^.der = NULO) ENTONCES

arbol ← arbol^.izq // Casos sin Hijos ó sin Hijo derecho

SINO SI (arbol^.izq = NULO) ENTONCES

arbol ← arbol^.der // Caso de Sólo Hijo derecho

EN OTRO CASO // Caso Hijos derecho y izquierdo

temp ← arbol^.izq // Busco el mayor hijo derecho del hijo izquierdo

ant ← arbol

MIENTRAS (temp^.der <> NULO) HACER

anterior ← temp

temp ← temp^.der

FINMIENTRAS

arbol^.elem ← temp^.elem

SI (anterior = arbol) ENTONCES

anterior^.izq ← temp^.izq

EN OTRO CASO

anterior^.der ← temp^.izqFINSI

FINSIELIMINAR(temp)

FIN

0 o 1 hijo

1 hijo

2 hijos

Metodología de la Programación. Curso 2002/03. Pág. 105

PROC SuprimirABB(↓↑arbol:TABB; ↓c:TClave)// Solución Recursiva

VARIABLES

ele:TElemento

INICIO

SI (ABBVacio(arbol)) ENTONCES

// No hacer Nada, ya que no hay nada que borrar

EN OTRO CASO

ele = InfoABB(arbol)

SI (ele.clave = c) ENTONCES

SuprimirNodo(arbol)

SINO SI (c < ele.clave ) ENTONCES

SuprimirABB(arbol^.izq,c)

EN OTRO CASO

SuprimirABB(arbol^.dch,c)

FINSI

FINSI

FIN¿Por qué usamos ¿Por qué usamos arbol^.izqy y arbol^.dch en vez de en vez de IzqABB(arbol) y y DechABB(arbol??

Metodología de la Programación. Curso 2002/03. Pág. 106

Page 54: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

PROC SuprimirNodo(↓↑arbol:TABB) // Solución RecursivaVariables

temp:TABBele :TElementoFUNC MayorHijoDerecho(↓arbol:TipoABBúsqueda):TElementoINICIO // Solución Recursiva

SI (ABBVacio(DchABB(arbol))) ENTONCESRESULTADO ← InfoABB(arbol)

EN OTRO CASORESULTADO ← MayorHijoDerecho(DchABB(arbol))

FINSIFIN

INICIOSI (arbol^.der = NULO) ENTONCES

temp ← arbolarbol ← arbol^.izq// Casos sin Hijos ó sin Hijo derechoELIMINAR(temp)

SINO SI (arbol^.izq = NULO) ENTONCEStemp ← arbolarbol ← arbol^.der// Caso de Sólo Hijo derechoELIMINAR(temp)

EN OTRO CASO // Caso Hijos derecho y izquierdoele ← MayorHijoDerecho(IzqABB(arbol))arbol^.elem ← eleSuprimirABB(arbol^.izq,ele.clave)

FINSIFIN Metodología de la Programación. Curso 2002/03. Pág. 107

Metodología de la Programación. Curso 2002/03. Pág. 108

Consideraciones acerca de la operación de imprimir.

• Recorrer un árbol es "visitar" todos sus nodos para llevar acabo algún proceso como por ejemplo imprimir loselementos que contiene.

• ¿Cómo imprimir los elementos de un árbol? ¿en quéorden?.

Page 55: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 109

• Para recorrer un árbol binario en general (de búsqueda o no), podemoshacerlo de tres formas distintas:

a) Recorrido InOrden.1) Recorrer el subárbol izquierdo en InOrden

Pasos: 2) "Visitar" el valor del nodo raiz y procesarlo3) Recorrer el subárbol derecho en InOrden

b) Recorrido PreOrden.1) "Visitar" el valor del nodo raiz y procesarlo

Pasos: 2) Recorrer el subárbol izquierdo en PreOrden3) Recorrer el subárbol derecho en PreOrden

c) Recorrido PostOrden.1) Recorrer el subárbol izquierdo en PostOrden

Pasos: 2) Recorrer el subárbol derecho en PostOrden3) "Visitar" el valor del nodo raiz y procesarlo

PROC Imp_InOrden(↓arbol:TABB)INICIO

SI (¬ABBVacio(arbol)) ENTONCES

Imp_InOrden(IzqABB(arbol))

ImpNodo(InfoABB(arbol))

Imp_InOrden(DerABB(arbol))

FINSI

FIN

PROC Imp_PreOrden(↓arbol:TABB)INICIO

SI (¬ABBVacio(arbol)) ENTONCES

ImpNodo(InfoABB(arbol))

Imp_PreOrden(IzqABB(arbol))

Imp_PreOrden(DerABB(arbol))

FINSI

FIN

Metodología de la Programación. Curso 2002/03. Pág. 110

Page 56: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

PROC Imp_PostOrden(↓arbol:TABB)INICIO

SI (¬ABBVacio(arbol)) ENTONCES

Imp_PostOrden(IzqABB(arbol))

Imp_PostOrden(DchABB(arbol))

ImpNodo(InfoABB(arbol))

FINSI

Fin

PROC ImprimirABB(↓arbol:TABB; ↓rec:TRecorrido)Inicio

CASE rec SEA

inorden: Imp_InOrden(arbol)

preorden: Imp_PreOrden(arbol)

postorden: Imp_PostOrden(arbol)

FINCASO

Fin

Fin /* MArbolBinarioBusqueda */

Metodología de la Programación. Curso 2002/03. Pág. 111

Metodología de la Programación. Curso 2002/03. Pág. 112

Ejemplo:

• El recorrido InOrden mostraría: BFGHPRSTWYZ

• El recorrido PreOrden: PFBHGSRYTWZ

• El recorrido PostOrden: BGHFRWTZYSP

Y

T

P

F

B H

GZ

W

R

S

Page 57: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 113

Nivel de utilización• Aplicaciones en las que estén implicas operaciones

de búsqueda de elementos• Ejemplo: Supongamos que deseamos implementar

un diccionario inglés/español en que la búsqueda dela traducción de una palabra inglesa sea rápida. Paraello podemos usar un árbol binario de búsqueda enel que el tipo elemento sea un registro con la palabraen inglés (que será la clave) y la palabra en español.

Metodología de la Programación. Curso 2002/03. Pág. 114

ALGORITMO Diccionario

DESE MABB IMPORTA TABB, CrearABB, DestruirABB, BuscarABB,InsertarABB, SuprimirABB, ImprimirABB

CONSTANTES

MAXCAD = 20

TIPOS

TCadena = ARRAY [0..MAXCAD-1] DE CARÁCTER

TDic = TABB

Tclave = TCadena

TElemento = REGISTRO

clave:TClave // Palabra inglés

traducción: TCadena // Palabra Español

FINREGISTRO

Page 58: Objetivos - UMAjlleivao/metodologia/tema6.pdf · 2013-11-05 · Aplicaciones Metodología de la Programación. Curso 2002/03. Pág. 4 Definición • Pila: Grupo Ordenado, (de acuerdo

Metodología de la Programación. Curso 2002/03. Pág. 115

PROC InsPalDic(↓↑d:Tdic; ↓pal: TElemento)

INICIO

InsertarABB(d,pal)

FIN

PROC BuscaPalDic(↓d:TDic; ↓inglés:TClave ; ↑pal: TElemento;

↑encontrado:LÓGICO)INICIO

BuscarABB(d,inglés,pal,encontrado)

FIN

PROC BorrarPalDic(↓↑d:TDic; ↓inglés:TClave)INICIO

SuprimirABB(d,inglés)

FIN

Metodología de la Programación. Curso 2002/03. Pág. 116

• [DALE89b] DALE, N y LILLY, S. C. Pascal y Estructurasde Datos. Segunda Edición. McGraw-Hill/Interamericanade España, 1989.

• [JOYA00] JOYANES, L. Programación en C++.Algoritmos, estructuras de datos y objetos. McGraw Hill,2000.

• [SAVI00] SAVICH, W. Resolución de problemas conC++. Segunda Edición. Prentice Hall, 2000.

• [STRO01] STROUSTRUP, B. El lenguaje deprogramación C++. Edición Especial, Adisson-Wesley,2001.