58
1 Metodología de Programación T E M A 6 T E M A 6 Estructuras de Datos Avanzadas 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 Programación Introducción 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

Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

  • Upload
    vudat

  • View
    228

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

1

Metodología de Programación

TEMA

6

TEMA

6

Estructuras de DatosAvanzadas

Contenido del Tema

6.1. Introducción6.2. Pilas6.3. Colas6.4. L istas6.5. Arboles Binar ios. Arboles Binar ios de Búsqueda6.6. Otras Estructuras.

Metodología de Programación

Introducción

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 , Colasy Listas

2) Datos organizados por Valor Arboles Binarios

Page 2: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

2

Metodología de Programación

Introducción

• Estudio de las Estructuras de Datos:

DefiniciónDefinición de la Estructura de Datos eidentificación de su Conjunto de Conjunto de OperacionesOperaciones

Desarrollo de diversas ImplementacionesImplementaciones

Presentación de AplicacionesAplicaciones

Metodología de Programación

Pilas

DefiniciónDefinición

•• Pila:Pila: Grupo Ordenado, (deacuerdo 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)

� � � �

� � � � � �

Añadir Eliminar

Page 3: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

3

Metodología de Programación

Pilas. Operaciones

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 Programación

Pilas. Operaciones

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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

4

Metodología de Programación

Pilas. Implementación

ImplementaciónImplementación1) Con un Ar ray• Array estructura adecuada Elementos Homogéneos

• Elementos almacenados de forma Secuencial

CONSTANTES

MAXPILA ← 100

TIPOS

TEle mento = ENTERO

TPil a = ARRAY[ 1..MA XPILA ] DE TEleme nto

Metodología de Programación

Pilas. Implementación

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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

5

Metodología de Programación

CONSTANTES

CABEZA ← 0

MAXPILA ← 100

TIPOS

TPila = ARRAY[CABEZA..MAXPILA] DE TElemento

Pilas. Implementación

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

� � � �

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

� � � � � �� � � � � �

223355

� � � � � �� � � � � �

Metodología de Programación

Pilas.Implementación

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

• Solución: CONSTANTES MAXPILA ← 100 TIPOS TEl ement o= // cual quie r tip o de datos TPi l a=REGISTRO

Cab eza: NATURAL Ele mento s: ARRAY[ 1..M AXPIL A] DE

TEle ment o

1 1 2 2 k k MAXPILAMAXPILA55 1313 88 ..................kk

� � � � � �� � � � � � � � � � � ! " #� � � � � ! " #

Page 6: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

6

Metodología de Programación

Pilas.Implementación

IMPLEMENTACI ÓN

FUNC Cr earP i la() : TPil a

VARIABL ES

pila : TPil a

IN I CIO

pila . Cabeza ← 0

RESULTADO ← pila

FI N

FUNC Pi l aVacia( ↓pil a:TP i la

): LÓGICO

IN I CIO

RESULTADO←pi la.C abeza =0

FI N

FUNC Pi l aLl ena( ↓pil a:TP i la

): LÓGICO

IN I CIO

RESULTADO ←( pila . Cabeza = MAXPILA)

FI N

PROCDestrui r Pil a( ↓↑pi la:T Pila)

IN I CIO

// No h ay q ue ha cer n ada.

FI N

Metodología de Programación

Pilas.Implementación

PROC SacarP i la( ↓↑pila : TPil a;

↑ele m:TEl ement o)

IN I CIO

elem ← pi la. Eleme ntos[p i la.C abez a]

pila . Cabeza←pila . Cabeza-1

FI N

/* precondición:

la pila no ha de estar vacía

* /

PROC Me t erP i la( ↓↑pila : TPil a;

↓el em :T Eleme nto)

IN I CIO

pila . Cabeza←pila . Cabeza+1

pila . Elementos

[p i la.C abez a] ← el em

FI N

/* precondición:

la pila no ha de estar llena

* /

Page 7: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

7

Metodología de Programación

PROC MeterPi l a ( ↓↑pil a:TPila;

↓el em:TEleme nto;

↑l l ena : LÓGI CO)

Inic i o

l lena ←Pi laLlena( pila)

SI ( ¬l l ena) ENTONCES

pila. Cabeza ← pila.Cabez a + 1

pila. Elementos

[ pila.Cab eza] ← ele m

FINSI

Fin

/* Sin Prec ondición .I ntroduceun element o en la pil a sino e stá llena * /

Pilas.Implementación

PROC SacarPila ( ↓↑pil a:TPila ;

↑el em:TEleme nto;

↑vacia: LÓGICO)

INIC I O

vac i a ← PilaV acia(pila )

SI ¬¬vacia ENTONCES

elem ← pi la.Elemen t os

[ pila.Cab eza]

pila.Cabe za ←pila . Cabeza-1

FI NSI

FIN

/* Si n precond i ción . Sac a unelem ento de la pila si n oestá vacía*/

Metodología de Programación

Pilas.Implementación

2) Con una L ista Enlazada de Punteros• Comienzo de una lista enlazada Cabeza de la PilaTI POS

TEle mento = // cual quier tipo de d atosTPil a = PUNTERO A TNodoPilaTNodoPila = REGIST RO

dat o: TEleme nto si g: TPila FI NREGI STRO

$ %$ % &&' ( ) * + (' ( ) * + (

, -, -..

Page 8: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

8

Metodología de Programación

Pilas.Implementación

PROC Met erPil a( ↓↑pila: TPila ;↑el em: TE l ement o;↑l l ena: LÓGI CO)

VARIABL ES

nuev onodo : TP i la

IN I CIO

llen a ← FALSO

nuev onodo ←NUEVO(T NodoPila)

nuev onodo ^ . dato ← elem

nuev onodo ^ . sig ← pi la

pila ← nuev onodo

FI N

PROC Sac arPil a( ↓↑pila: TPila ;↑ele m :T Elem ento; ↑vac í a: LÓGICO)

VARIABL ESpt r : TP i la

IN I CIOvací a ← Pi l aVací a(p i la)

SI ¬vac í a ENTONCES

el em ← pi l a^ .dat o

pt r ← pil a

pi l a ← pi l a^ .sigELI MINAR(pt r )

FINSIFI N

Metodología de Programación

Pilas.Implementación

PROC Cr earP i la() : TPil a

IN I CIO

RESULTADO ← NULO

Fi n

FUNC Pi l aVacia(p i la : TPila

): LÓGICO

IN I CIO

RESULTADO ← (pil a= NULO)

FI N

PROC De stru i rPil a( ↓↑pi la:T Pila )

Var iabl es

ptr: TPil a

In i cio

MIENTRAS( pila ≠ NULO) HACER

pt r ← pil a

pi l a ← pi l a^.s i g

ELI MINAR(pt r )

FINMI ENTRAS

FI N

Page 9: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

9

Metodología de Programación

Pilas. Aplicaciones

AplicacionesAplicaciones

•• Ejemplo1Ejemplo1: Leer una secuencia de caracteres desde teclado: Leer una secuencia de caracteres desde tecladoe 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 suinversa}inversa} (Suponemos que $ no está ni en W ni en W´)(Suponemos que $ no está ni en W ni en W´)

Metodología de Programación

Pilas. Ejemplo1

ALGORITMO I nvers oDESDE MPila IMPORTA

TPil a, Crea r Pila ,Met erPi l a, Sa carPi l a,Pi l avac i a, Destr uirPi l a

CONSTANTESENTER ← CHR(13 )

TI POSTEle mento = CARÁCTER

VARIABL ESc : TElementopila : TP i lall,v : LÓGICO

IN I CIO

pila ← Crea r Pila ( )LEER( c)

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

Met erPi l a(p i la,c , ll)Leer(c)

FINMI ENTRAS Sacar Pila ( pila , c,v)

MIENTRAS( ¬Pi l aVacia(p i la)) HACER

SacarPi l a(p i la,c , v)Escribi r (c)

FINMI ENTRASDest r uirP i la(p i la)

FI N

Page 10: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

10

Metodología de Programación

Pilas. Ejemplo2

ALGORI TMO Bal anceo

DESDE MPi la IMPORTA Crea r Pi l a, TP i la,Meter Pil a, S acar Pil a, P i laV aci a,Destr uir Pila

CONSTANTESENTER ← CHR( 13)

Ti pos

TEl emento = CARÁCTER

VARIABLES

c : TE l emento

pil a : TPi l a

bie n,l l , v : LÓGICO

I nici o

pil a ← Crear Pila ( )

bie n ← CI ERTO

LEER(c )

MI ENTRAS( bie n ∧∧ ( c≠ENTER)HACER

SI c= ‘ (’ ENTONCES

Meter Pil a(pi l a, c ,ll )

bi en ← ¬ll

EN OTRO CASO

SI c = ‘ ) ’ ENTONCES

Sacar Pil a(pi l a, c ,v)

bi en ← ¬v

FI NSI

FIN SI

LEER(c )

FI NMIENTRAS

SI bi en ∧ Pil aVaci a( pila ) ENTONCES

Esc r ib i r(“ cadena bal ance ada “)

EN OTRO CASO

Esc r ib i r(“ cadena no bala nceada” )

FI NSI

Destr uir Pila ( pi l a)

FI N

Metodología de Programación

Pilas. Ejemplo3Algo r itmo Leng uaje_LDESDE MPila IMPORTA TPi l a,

CrearPila , MeterPi l a,SacarPila , Destrui r Pila

CONSTANTESENTER ← CHR(13)

TIPOSTElemento = CARÁCTER

VARIABLESc1, c2 : TElementopila : TP i labien, ll, v : LÓGICO

Inic i opila ← Cr earPila( )

l l ← FALSOLEER(c1)MIENTRAS ( c1 ≠‘ $’) ∧( ¬ll) HACER

Mete r Pila(pil a,c1,ll)LEER( c1)

FINMIENTRAS

Leer(c1)

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

HACERSaca r Pila(pil a,c2,v)bien ← ( ¬v) ∧ ( c1=c2)/* H e podido sacar el

el emnto y conicide*/SI ( bien) ENTONCES Leer(c1)FINS I

FINMIENTRASSI (bien ∧

Pila Vacia(pil a)) ENTONCESEscr i bir(“ Si pertenece ” )

EN OTRO CASOEscr i bir (“No pertenece ” )

FINSIDestruirP i la(pila)

FIN

Page 11: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

11

Metodología de Programación

Pilas. Aplicaciones

• 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 usode paréntesis para evitar ambigüedades A+B*C

Metodología de Programación

Pilas. Aplicaciones

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 Notación PostfijaPostfija• 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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

12

Metodología de Programación

Pilas. Aplicaciones

• 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ónPostfija

1)Usaremos una pila

2)La expresión postfija se almacenará en un array de caracteresy será correcta

3)Los operadores serán: +, -, * y /

4)Los operandos serán letras mayúsculas (a cada una lepodemos asignar un valor)

Metodología de Programación

Pilas. Ejemplo4

CONSTANTES

MAX ← 20

TI POS

TAr ray = ARRAY[1 . .MAX] DECARÁCTER

TEl ement o=ENTERO

FUNC Op eran do( ↓c:CA RACTER)

: ENTERO

VARIABL ES

res: ENTERO

IN I CIO

CASO c SEA

‘A ’ : r es ← 5

‘B ’ : r es ← 7

‘C ’ : r es ← - 1

‘D ’ : r es ← 11

EN OTRO CASO

r es ← 0

FINCASO

RESULTADO ← re s

FI N

Page 13: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

13

Metodología de Programación

Pilas. Ejemplo4

FUNC Eval_post f ija( ↓exp: TAr r ay; ↓ultimo: NATURAL): ENTERO

DESDE MPil a I MPORTA TPi l a, CrearPi l a, MeterPi l a, SacarPil a,Dest r uirPila

Vari ablespila : TP i lai, op1, o p2, resul t : ENTEROc : CARÁCTERv,ll: LÓGICO

FUNC es_operad or( ↓c: CARÁCTER) : LÓGICOINIC I O

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

Metodología de Programación

Pilas. Ejemplo4

Inic i opila ← Cr earPila( )PARA i ← 1 HASTA ultimo HACER

c ← exp[i]SI es_operado r (c) ENTONCES

Saca r Pila(pil a,op2,v)Saca r Pila(pil a,op1,v)CASO c SEA

‘+’ : MeterPil a(pila,op 1+op2,ll)‘-’ : MeterPi l a(pila,o p1-op2,ll)‘*’ : MeterPi l a(pila,o p1*op2,ll)‘/’ : MeterPi l a(pila, op1/op2,ll )

FINCASOEN OTRO CASO

Mete r Pila(pil a, Operand o(c))FINS I

FINPARASacarPila ( pila,res ult)DestruirP i la(pila)RESULTADO ←← resul t

Fin

Page 14: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

14

Metodología de Programación

Colas

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)

/ 0 1 2 3 1/ 0 1 2 3 1 4 5 6 7 84 5 6 7 8 9 : ; : <9 : ; : <= > ? > @= > ? > @

Metodología de Programación

Colas. Operaciones

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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

15

Metodología de Programación

Colas. Operaciones

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 Programación

Colas. Implementación

ImplementaciónImplementación 1) 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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

16

Metodología de Programación

Colas. Implementación

• Ejemplo:

A B C D E E E E E E E E E EA B C D E E E E E E E E E E

A B C D E E E E E E E E E EA B C D E E E E E E E E E E

F G H I J K LF G H I J K LL M N O P P P P P P P P P PL M N O P P P P P P P P P PMeter(Cola,” A” )Meter(Cola,” A” ) QQ

R S T U V V V V V V V V V VR S T U V V V V V V V V V VQQ WWMeter(cola, “ B” )Meter(cola, “ B” ) X Y Z [ \ ] ^X Y Z [ \ ] ^

Sacar(cola, Sacar(cola, elemelem))WW

_ ^ ` a b b b b b b b b b b_ ^ ` a b b b b b b b b b bWW X Y Z [ \ ] _X Y Z [ \ ] _DesplazarDesplazar

Metodología de Programación

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

Colas. Implementación

Page 17: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

17

Metodología de Programación

Colas. Implementación

• Ejemplo:

c d e f g g g g g g g g g gc d e f g g g g g g g g g gc d e f g g g g g g g g g gc d e f g g g g g g g g g gMeter(Cola,” A” )Meter(Cola,” A” ) hh

hh iiMeter(cola, “ B” )Meter(cola, “ B” )

j k l m n l o pj k l m n l o pj q m r s o pj q m r s o p

j k l m n l o pj k l m n l o pj q m r s o tj q m r s o t

p t u v w w w w w w w w w wp t u v w w w w w w w w w wxx yyMeter(cola, “ C” )Meter(cola, “ C” ) zz { | } ~ � } � �{ | } ~ � } � �{ � ~ � � � �{ � ~ � � � �

� � � � � � � � � � � � � �� � � � � � � � � � � � � ���Sacar(cola,Sacar(cola,elemelem)) zz { | } ~ � } � �{ | } ~ � } � �{ � ~ � � � �{ � ~ � � � �

Metodología de Programación

• 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

Colas. Implementación

Page 18: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

18

Metodología de Programación

Colas. Implementación

•• Ejemplo:Ejemplo:�� ����

������

����

�� ����

������

����

�� ����

������ �� � � � � � � � �� � � � � � � �

� � �   ¡ � �� � �   ¡ � �� � � � � � � �� � � � � � � �� � �   ¡ � �� � �   ¡ � �

�� ����

������

����

Meter(cola,” G” )Meter(cola,” G” )

¢¢ £ ¤ ¥ ¦ § ¥ ¨ ©£ ¤ ¥ ¦ § ¥ ¨ ©£ ª ¦ « ¬ ¨ ­£ ª ¦ « ¬ ¨ ­£ ¤ ¥ ¦ § ¥ ¨ ©£ ¤ ¥ ¦ § ¥ ¨ ©

£ ª ¦ « ¬ ¨ ®£ ª ¦ « ¬ ¨ ®

Sacar(cola,Sacar(cola,elemelem))

Metodología de Programación

Colas. Implementación

­­ ¯¯°°

±±©©®®

²²³³

Meter(cola,” L” )Meter(cola,” L” )

´´ µ ¶ · ¸ ¹ · º »µ ¶ · ¸ ¹ · º »µ ¼ ¸ ½ ¾ º ¿µ ¼ ¸ ½ ¾ º ¿

¿Como sabemos si la cola está vacía o llena?ÀÀ ÁÁ¿¿

»»ÂÂÃÃ

ÄÄÅŵ ¶ · ¸ ¹ · º »µ ¶ · ¸ ¹ · º »

µ ¼ ¸ ½ ¾ º Áµ ¼ ¸ ½ ¾ º Á´´ ÆÆ

ÇÇÈÈÉÉ

ÊÊ Ë Ë Ì Í Î Ï Î Î Ð Ñ Ï Ë ËË Ë Ì Í Î Ï Î Î Ð Ñ Ï Ë Ë

ÒÒ ÓÓÔÔ

ÕÕÖÖ×× ØØ

ÒÒ ÓÓÔÔ

ÕÕÖÖ×× Ù Ú Û Ü Ý Û Þ ÕÙ Ú Û Ü Ý Û Þ Õ

Ù ß Ü à á Þ ÔÙ ß Ü à á Þ ÔÙ Ú Û Ü Ý Û Þ ÔÙ Ú Û Ü Ý Û Þ ÔÙ ß Ü à á Þ ÔÙ ß Ü à á Þ Ô Sacar(cola,Sacar(cola,elemelem))

â â ã ä å æ ç æ è é æ â ââ â ã ä å æ ç æ è é æ â â

Page 19: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

19

Metodología de Programación

Colas. Implementación

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

elementos almacenados en la cola

Variable=0 Cola vacía

Variable=MaxCola Cola llena

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

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

Metodología de Programación

Colas. Implementación

• Ejemplo:êê ëëìì

ííîîïï

ððññò ó ô õ ö ô ÷ íò ó ô õ ö ô ÷ íò ø õ ù ú ÷ ïò ø õ ù ú ÷ ï

êê ëëìì

ííîîïï

ððññ

Meter(cola,” G” )Meter(cola,” G” )

ûû ò ó ô õ ö ô ÷ íò ó ô õ ö ô ÷ íò ø õ ù ú ÷ êò ø õ ù ú ÷ ê

¿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 =frenteêê ëëìì

ííîîïï

ððññò ó ô õ ö ô ÷ ìò ó ô õ ö ô ÷ ì

ò ø õ ù ú ÷ ëò ø õ ù ú ÷ ëüü ýý

þþÿ � �ÿ � �

Page 20: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

20

Metodología de Programación

Colas. Implementación

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

�� ����

������

��

�� ����

������ � � � � � � � � � �

� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Sacar(cola,Sacar(cola,elemelem))

� � � �

Metodología de Programación

Colas. Implementación

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

CONSTANTESMAXCOLA ← 100

TI POSTEle mento = // Cua l quie r tip o de dato sTCol a = REGIST RO

e l ement os: ARRAY[ 1..M AXCOLA] DE TElemento F r ente , Fina l : [ 1.. MAXCOLA]FI NREGI STRO

1 1 2 2 MaxColaMaxCola55 1313 ......................................

� � � � � �� � � � � �

� � � � �� � � � ���

MaxcolaMaxcola

Page 21: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

21

Metodología de Programación

Colas. Implementación

FUNC Cr earC ola() : TCol a

VARIABL ES

cola : TCol a

IN I CIO

cola . Fren t e ← MAXCOLA

cola . Fina l ← MAXCOLA

RESULTADO ← co l a

FI N

PROC De stru i rCol a( ↓↑cola

:T Cola )

IN I CIO

// No h ay q ue ha cer n ada.

FI N

FUNC Co l aLl ena( ↓col a:Tc ola

): LÓGICO

IN I CIO

RESULTADO ←(c ola.F i nal MOD MAXCOLA)+ 1

= cola. Fren t e

FI N

FUNC Co l aVacia( ↓col a:Tc ola

): LÓGICO

IN I CIO

RESULTADO←← col a.Fin al =cola . Fren t e

FI N

Metodología de Programación

Colas. Implementación

PROC Met erC ola( ↓↑cola : TCol a;

↓ele m:TEl ement o)

VARIABL ES

f i n: NATURAL

IN I CIO

fin ← ( col a.Fi nal M OD

MAXCOLA) + 1

cola . Fina l ← f i n

cola . elem entos [ fin ] ←elem

FI N

PROC SacarC ola( ↓↑cola : TCol a;

↑ele m:TEl ement o)

VARIABL ES

i ni: NATURAL

IN I CIO

ini ← (col a.Fr ente MOD MAXCOLA) + 1

cola . Fren t e ← i ni el em←co l a.el ement os[in i ]

FI N

Page 22: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

22

Metodología de Programación

Colas. Implementación

2) Con listas enlazadas con Punteros

• Usamos dos variables de tipo puntero, frente y final, queapunten a los nodos que contienen los elementos frente yfinal

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

� �� � !!

" # $ % & $" # $ % & $ " ' % ( )" ' % ( )

Metodología de Programación

Colas. Implementación

• Agrupamos las variables frente y final en un registro

TI POS

TEle mento = // cua l quie r tip o de dato sTPunt ero = PUNTERO A T NodoTNodo = REGIST RO

va l or : TEl ement osi g : TPunt ero

FIN REGISTROTCol a = REGIST RO

Fr ente : TP unter oFi nal : TPuntero

FIN REGISTRO

* +* + ,,--

. / 0 1 2 0. / 0 1 2 0 . 3 1 4 5. 3 1 4 5

Page 23: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

23

Metodología de Programación

Colas. Implementación

FUNC CrearCola ( ): TCola

VARIABLES

cola:TCol a

INIC I O

cola. Frente := NULO

cola. Final := NULO

RESULTADO ← cola

FIN

FUNC ColaVacia ( ↓cola:

TCola ) : LÓGICO

INIC I O

RESULTADO ←cola. Frente = NULO

FIN

PROC DestruirC ola( ↓↑cola :TCola )

Vari ablesnodo,sgte : TPuntero

Inic i o

SI (c ola.Frente ≠NULO) ENTONCESsgte ← cola.Fr ente

MIENTRAS ( sgte ≠NULO) HACERnodo ← sg t esgte ← sg t e^.sigELIMI NAR(nodo)

FINMIENTRASFINSI

cola . Frente ← NULOcola . Final ← NULOFIN

Metodología de Programación

Colas. Implementación

PROC MeterCola ( ↓↑cola:TC ola;↓elem : TElemento )

VARIABLESptr: TPun t ero

Inic i optr ← NUEVO( TNodo)ptr ^. valor ← elemptr ^s ig ← NULOSI ColaVa cia(cola)

ENTONCEScola. Frente ← ptr

EN OTRO CASOcola. Final ^ .sig ← ptr

FINSIcola.Fina l ← nuevonodo

FIN

PROC SacarCola ( ↓↑cola:T Cola;

↑elem : TElemento )VARIABLES

t emp : Ti poPunteroINIC I O

t emp ← cola.Fr ente

elem ← cola.Fr ente ^. valorcola.Fren t e ←

cola. Frente ^ .sigSI (cola. Frente= NULO)

ENTONCES

cola. Final ← NULOFINSIELIMINAR ( t emp)

FIN

Page 24: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

24

Metodología de Programación

Colas. Aplicaciones

Ejemplo: Reconocimiento del lenguaje. L={W$W/W es una cadena que no contiene a$}Algo r itmo Leng uaje_LDESDE MCola IMPORTA TCola, CrearCola, ColaVa cia, Sa carCola,

Mete r Cola, Des t ruirColaCONSTANTES

ENTER ← CHR(13 )TIPOS

TElemento = CARÁCTERVARIABLES

bien : LÓGICOc1,c2 : T Elementocola : TC ola

INIC I O col a ← Cr earCola() LEER(c1) MIENTRAS (c1 ≠ ‘$’) HACER MeterCola ( cola,c1)

LEER(c1)

FIN MIENTRAS

Metodología de Programación

Colas. Aplicaciones

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

SI Col aVacia(c ola) ENTONCESbien ← FALSE

EN OTRO CASOSacar Cola(cola, c2)SI (c 1 ≠c2) ENTONCES

bien ← FALSEEN OTRO CASO

LEER(c1)FINSI

FINSIFINMIENTRASSI (bien ∧ ColaVaci a(cola)) ENTONCES

Escri bir(“Pert enece”)EN OTRO CASO

Escri bir(“No p ertenece”)FINSIDestruirC ola(cola)

FIN

Page 25: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

25

Metodología de Programación

Listas

• Definición de lista

• Implementación - Estática

- Dinámica

Metodología de Programación

Listas

• 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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

26

Metodología de Programación

Operaciones sobre listas:Crear

¿Esta vacía?

¿Está llena?

Insertar un elemento

Eliminar un elemento

Impr imir

Destruir

Listas

- De forma ordenada

- De forma no ordenada

Metodología de Programación

Listas

MÓDULO Mlistas

DEFINICIÓN

TIPOS

TElemento =/ / cualquier tipo de datos

TLista = // por definir

FUNC Crea r Lista():T Lista

FUNC List aVacia( ↓li s ta:TLista ) : LÓGICO

FUNC List aLlena( ↓li s ta:TLista ) : LÓGICO

PROC Inse r tarLista( ↓↑lista:TL i sta; ↓ele m:TElement o)

PROC Elim i narLista( ↓↑Lista:TL i sta; ↓ele m:TElement o)

PROC Impr i mirLista( l ista:TLis t a)

PROC Dest r uirLista( ↓↑lista: T Lista)

IMPLEMENTACIÓN

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

Fin

Page 27: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

27

Metodología de Programación

Listas

• Implementación:

– Representación secuencial

– Representación enlazada- Dinámica

- Estática

Metodología de Programación

Listas

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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

28

Metodología de Programación

Listas

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 Programación

Page 29: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

29

Metodología de Programación

Listas

• 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 Programación

Listas

Page 30: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

30

Metodología de Programación

Listas

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 medianteasignación dinámica de memoria, consideramos el array yla variable LibreL ibre como globales al módulo deimplementación de la lista.

MÓDULO Mlistas

DEFINICIÓN

CONSTANTES

VALOR_NULO ← 0 // Hace l as funcion es de NULO

MAX ← 100

TIPOS

TLista = [ 0..Max]

TElemento = // cual quier tipo de datos

TNodo = REGISTRO

eleme nto : TEle mento

sig : TLista

FINREGISTRO

FUNC Crea r Lista():T Lista

FUNC List aVacia( ↓li s ta:TLista ) : LÓGICO

PROC List aLlena( ↓li s ta: TList a): LÓGICO

PROC Impr i mirLista( ↓lista: TL i sta)

PROC Inse r tarLista( ↓↑lista:TL i sta; ↓ele m:TElement o)

PROC Elim i narLista( ↓↑lista:TL i sta; ↓ele m:TElement o)

PROC Dest r uirLista( ↓↑lista:TL i sta)

Metodología de Programación

Page 31: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

31

IMPLEMENTACIÓN

TIPOS

TMemoria = ARRAY [1 . .MAX] DE TNodo

VARIABLES

memoria : TMemoria

l ibre : T Lista

FUNC CrearList a():TLista

INIC I O

RESULTADO ←← VALOR_NULOFIN

FUNC ListaVaci a( ↓lista:T Lista): LÓGICO

INIC I O

RESULTADO ←← (l i sta = VAL OR_NULO)

FIN

FUNC ListaLlen a( ↓lista:T Lista): LÓGI CO

INIC I O

RESULTADO ←← (l i bre = VAL OR_NULO)

FIN Metodología de Programación

FUNC NuevoNodo ( ): Tlista

VARIABLES

ptr: TLista

INICI O

ptr ← libr e

SI (p t r ≠ Nul o) ENTONCES

libre ← memoria[ptr] . sig

FINSI

RESULTADO ← ptr

FIN

PROC EliminarN odo ( ↓↑p : TLista)

INICI O

memori a[p].sig ← li bre

lbre ← p

p ← VALOR_NULO

FIN

Para los proce dimientos NUEVONUEVO y ELI MINARELI MINAR,nece s itamos an t es implem entar las operacione s(Nue voNodo, El i minarNodo ) equivale ntes a las queusamos al trab ajar con m emoria din ámica.

Metodología de Programación

Page 32: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

32

PROC ImprimirL i sta( ↓list a : TLista )

VARIABLES

ptr : TLista

INIC I O

ptr ← lis t a

MIENTRAS ( ptr ≠ VALOR_NULO) HACER

Escri bir(memori a[ptr].el emento)

ptr ← memor ia[ ptr ]. s ig

FINMI ENTRAS

FIN

PROC InsertarL i sta( ↓↑lis t a: TLista ; ↓elem: T Elemento)

VARIABLES

ptr : TLista

INIC I O

ptr ← NuevoNodo()

SI (p t r ≠ VALOR_NULO) ENTONCES

memor ia[ptr].e l emento ← elem

memor ia[ ptr ].s i g ← lista

list a ← pt r

FINSI

FIN

Depende de TElemento

Metodología de Programación

PROC EliminarL i sta ( ↓↑li s ta: TList a; ↓elem : TElemento)

VARIABLES

pav, pret : TLista

INIC I O

pav ← lis t a // pu ntero avan zado

pret ← Nul o // pu ntero retr asado

MIENTRAS (memor ia[pav].e l emento ≠ elem) HACER

pret ← pav

pav ← memor ia[pav]. s ig

FINMI ENTRAS

SI (p r et = VAL OR_NULO) ENTONCES

lista ← memoria[lis t a].sig

EN OTRO CASO

memor ia[pret]. s ig ← memoria[ pav].sig

FINSI

Elimi narNodo(p av)

Fin

Suponemos que elelemento a borrar

está en la lista

Metodología de Programación

Page 33: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

33

PROC Dest r uirLista( ↓↑lista: T Lista)

Variables

aux: TLista

I NICIO

MIENTRAS (list a ≠ VALOR_NULO) HACER

aux ← list a

lista ← memoria[lis t a] .sig

Elimi narNodo (au x)

FIN

FIN

INIC I O // Mlis t a

Li bre ← 1

PARA ptr ← 1 HASTA ( Max- 1) HACER

memoria [ ptr ] . si g ← pt r + 1

FINPARA

memoria [Max ] .enl ace ← VALOR_NULO

FIN // Mlist a

Metodología de Programación

Metodología de Programación

Listas enlazadas circulares

• 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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

34

Metodología de Programación

Listas enlazadas circulares

• 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 Programación

Listas enlazadas circulares

Ejemplo: (usando una implementación estática)Ejemplo: (usando una implementación estática)PROC Imprimir Lista( ↓lista:T Lista)VARIABLES

ptr : TLista

INIC I Optr ← listaSI ( ptr ≠ VALOR_NULO) ENTONCES

REPETIREscr i bir(memo r ia[ ptr ]. elemento)ptr ← memoria[ ptr ] . sig

HASTA QUE pt r = listaFINSI

Fin

Page 35: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

35

Metodología de Programación

Listas enlazadas circulares

• 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 Programación

Listas doblementeenlazadas

• 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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

36

Metodología de Programación

Listas doblementeenlazadas

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

ImplementaciónImplementación

lista

Metodología de Programación

Listas

NIVEL DE UTILIZACIÓN

• Estructura muy utilizada.

•• Ejemplo:Ejemplo:

Manejo de tablas hash con el método de encadenamiento parael tratamiento de sinónimos.

– Utili zaríamos un array de listas como tabla hash. (Lo que en elprimer tema se llamó Encadenamiento)

– Las listas tienen como elementos cadenas de caracteres.

Page 37: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

37

Modul o Mhash

DEFINICIÓN

DESDE MLista I MPORTA Tli s ta

CONSTANTES

MAXCAD ← 20

MAXELE ← 100

TIPOS

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

TElemento = TCa dena

TRango = [0. . MAXELE-1]

TTablaHas h= ARRAY TRango DE TLista

PROC Almacenamiento ( ↓↑tabla:T TablaHash; ↓dato:TEl emento)

FUNC Búsqueda( ↓tabl a:TTablaHa sh; ↓dato: TElemento) : LÓGICO

PROC Elim i nación( ↓↑t abla:TTab l aHash; ↓dato:TEleme nto)

Metodología de Programación

IMPLEMENTACIÓN

PROC Almacenamiento ( ↓↑tabla:T TablaHash; ↓dato:TEl emento)

I NICIO

Inser t ar(tabla [ Hash(dato ) ],dato)

FIN

FUNC Búsqueda( ↓tabl a:TTablaHa sh; ↓dato: TElemento) : LÓGICO

I NICIO

RESULTADO ← Buscar( t abla[Hash ( dato)],da t o)

FIN

PROC Elim i nación( ↓↑t abla:TTab l aHash; ↓dato:TEleme nto)

I NICIO

Elimi nar(tabla [ Hash(dato ) ],dato)

FIN

Fin (* Mhash *)

Metodología de Programación

Page 38: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

38

Metodología de Programación

Árboles binarios

• 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 llamadola 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 Programación

Árboles binarios

• 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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

39

Metodología de Programación

Árboles binarios

• 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 Programación

Árboles binarios

•• Árbol Árbol estr ictamenteestr ictamente binar io binar io: árbol binario en que cada nodono-hoja tiene subárboles izquierdo y derecho no vacíos.

•• NivelNivel de un nodo en un árbol binar io de un nodo en un árbol binar io: 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 binar io de un árbol binar io: máximo nivel de cualquierhoja del árbol.

•• Árbol binar io Árbol binar io 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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

40

Metodología de Programación

Árboles binarios

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 Programación

Árboles binarios

Árbol ternar io: 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-ar io: 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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

41

Metodología de Programación

Árboles binarios

¿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 MAr bolBi n

DEFINIC I ÓN

TIPOS

TEl ement o = // C ualqu i er t ipo de da t os

TAr bolB i n = PUNTERO A TNo doArb olBin

TNodoAr bolB i n = REGISTRO

dato : TEle mento

i zq,de r : T Arbol Bin

FI NREGI STRO

FUNC Crea r Arbo l Vaci o(): TArbo l Bin

FUNC Crea r Arbo l ( ↓raiz : TEle ment o; ↓i zq, ↓dch: T Arbo l Bin

) : TAr bolB i n

FUNC Arbo l Vaci o( ↓arbo l :TAr bolB i n): LÓGICO

FUNC Info ( ↓arbol : TArb olBin ) :TE l ement o

FUNC Izq( ↓ar bol: TArbo l Bin) : TAr bolB i n

FUNC Der( ↓ar bol: TArb olBin ) : T Arbol Bin

PROC Dest r uirA r bol ( ↓↑ar bol: TArbo l Bin)

Implementación dinámica

Metodología de Programación

Page 42: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

42

IMPLEMENTACI ÓN

FUNC Crea r Arbo l Vaci o(): TArbo l Bin

INIC I O

RESULTADO ← NULO

FIN

FUNC Crea r Arbo l ( ↓raiz : TEle ment o; ↓i zq, ↓dch: T Arbo l Bin

) : TAr bolB i n

VARIABLES

ar bol : TAr bolBi n

INIC I O

ar bol ← NUEVO(TNo doAr bolBi n)

ar bol^. dato ← rai z

ar bol^. i zq ← izq

ar bol^. der ← dch

RESULTADO ← arbol

FIN

Metodología de Programación

FUNC Arbo l Vaci o( ↓arbo l :TAr bolB i n): LÓGICO

INIC I O

RESULTADO ← (arb ol = NULO)

FIN

FUNC Info ( ↓arbol : TArb olBin ) :TE l ement o

INIC I O

RESULTADO ← arbo l ^.d ato

FIN

FUNC Izq( ↓ar bol: TArbo l Bin) : TAr bolB i n

INIC I O

RESULTADO ← arbo l ^.i zq

FIN

FUNC Der( ↓ar bol: TArb olBin ) : T Arbol Bin

INIC I O

RESULTADO ← arbo l ^.d er

FIN

Metodología de Programación

Page 43: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

43

PROC Dest r uirA r bol ( ↓↑ar bol: TArbo l Bin)

INIC I O

SI ( ¬Ar bolV acio ( arbo l )) ENTONCES

Destru i rArb ol(ar bol^. der)

Destru i rArb ol(ar bol^. i zq)

ELI MINAR(ar bol)

FI NSI

FIN

FI N // MAr bolBi n

Metodología de Programación

Módulo MAr bolBi nEstá t ico

DEFINIC I ÖN

CONSTANTES

VALOR_NULO ← 0

MAX ← 100

TIPOS

TAr bolB i n = [0.. MAX]

TNodoAr bolB i n = REGISTRO

dato : TEle mento

i zq,de r : T Arbol Bin

FI NREGI STRO

FUNC Crea r Arbo l Vaci o(): TArbo l Bin

FUNC Crea r Arbo l ( ↓raiz : TEle ment o; ↓i zq, ↓dch: T Arbo l Bin

) : TAr bolB i n

FUNC Arbo l Vaci o( ↓arbo l :TAr bolB i n): LÓGICO

FUNC Info ( ↓arbol : TArb olBin ) :TE l ement o

FUNC Izq( ↓ar bol: TArbo l Bin) : TAr bolB i n

FUNC Der( ↓ar bol: TArb olBin ) : T Arbol Bin

PROC Dest r uirA r bol ( ↓↑ar bol: TArbo l Bin)

Implementación estática

Metodología de Programación

Se deja propuesto como Se deja propuesto como ejercicio la de los procedimientos ejercicio la de los procedimientos y funciones para una implementación y funciones para una implementación estática de un arbol binar ioestática de un arbol binar io

Page 44: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

44

Metodología de Programación

Árboles binarios

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

caminos”

• Muy util izado en aplicaciones relacionadas con expresionesaritméticas.

Ejemplos:Ejemplos:

+

5 2

(12-3)* (4+1)

5 + 2

*

- +

12 3 4 1

Metodología de Programación

Ejemplo:Ejemplo:

Ti pos

Tipo Decis i on = (Op erado r , Op erand o)

TEle mento = REGIST RO

CASO c onten i do:T i poDecisi on SEA

Operad or:

oper: CARÁCTER

Operan do:

val: REAL

FI NCASO

FI NREGI STRO

Árboles binarios

Diseñemos un algor itmo para evaluar una expresiónar itmética que está almacenada en un árbol binar io.

Page 45: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

45

FUNC Eval( ↓arb ol: TArbo l Bin ): REAL

VARIABLES

dato:TEle mento;

r esult: REAL

INIC I O

dato ← Info(ar bol)

SI (dato. contenido = Operando ) ENTONCES

resul t ← dato.val

EN OTRO CASO

CASO dato.oper SEA

'+': r esult ← Eval( I zq(arbol) ) +Eval(Der ( arbol))

'-': r esult ← Eval( I zq(arbol) ) -Eval(Der ( arbol))

'*': r esult ← Eval( I zq(arbol) ) *Eval(Der ( arbol))

'/': r esult ← Eval( I zq(arbol) ) /Eval(Der ( arbol))

FINCASO

FINSI

RESULTADO ← re sult

Fin

Metodología de Programación

Metodología de Programación

Árboles binarios debúsqueda

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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

46

Metodología de Programación

Árboles binarios debúsqueda

• 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 Programación

Árboles binarios debúsqueda

Operaciones:

Crear

Buscar

Insertar

Suprimir

Imprimir

+ + Las definidas para unárbol binario general

Page 47: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

47

Módul o MABBDefi nición

TIPOS

TRecor rido = ( I nOrden,Pr eOrden,Pos t Orden)

TClav e = ENTERO

TElemento = REGISTRO

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

FI NREGISTRO

TABB = PUNTERO A TNodoABB

TNodoABB = REGI STRO

izq,d er:TABB

elem: TElemento

FINREGISTRO

/ / Operac i ones típi cas de los árboles

FUNC Crea r ABB():TAB B

FUNC ABBVacio( ↓ar bol: TABB): LÓGI CO

FUNC Info ABB( ↓ar bol:T ABB): TEle mento

FUNC IzqA BB( ↓arb ol:TA BB): TABB

FUNC DerA BB( ↓arb ol: T ABB): TAB B

PROC Dest r uirA BB( ↓↑arbo l : TA BB)

Metodología de Programación

/ / Operac i ones Excl usivas de l os árbole s binarios de búsque da

PROC Busc arABB( ↓arb ol:TABB; ↓c:TClave; ↑dato:TEle mento;

↑EnAr bol: LÓGICO)

PROC Inse r tarABB( ↓↑arbol:TABB ; ↓dato:TE l emento)

PROC Supr i mirABB( ↓↑arbol:TABB ; ↓c:TClav e)

PROC Impr i mirABB( ↓ar bol:TABB; ↓rec:TRe corrido)

IMPLEMENTACIÓN

FUNC Crea r ABB():TAB B

I NICIO

RESULTADO ← NULO

FIN

FUNC ABBVacio( ↓ar bol: TABB): LÓGI CO

INIC I O

RESULTADO ← (arb ol = NULO)

FIN

FUNC Info ABB( ↓ar bol:T ABB): TEle mento

INIC I O

RESULTADO ← arbo l ^.d ato

FIN

Metodología de Programación

Page 48: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

48

FUNC IzqA BB( ↓arb ol:TA BB): TABB

INIC I O

RESULTADO ← arbo l ^.i zq

FIN

FUNC DerA BB( ↓arb ol: T ABB): TAB B

INIC I O

RESULTADO ← arbo l ^.d er

FIN

PROC Dest r uirA BB( ↓↑arbo l : TA BB)

INIC I O

Destrui r ABB( arbo l ^.iz q)

Destrui r ABB( arbo l ^.dc h)ELIMI NAR(arbol )

FIN

Metodología de Programación

PROC Busc arABB( ↓arb ol:TABB; ↓c:TClave; ↑dato:TEle mento;

↑EnAr bol: LÓGICO)

/ / Soluci ón Iterati va

VARIABLES

ptrAr bol: TABB

ele:T Elemento

I NICIO

EnArb ol ← FALSO

ptrAr bol ← arbol

MIENTRAS (( ¬ABBVacio ( ptrAr bol)) ∧ ( ¬EnArbol ) ) HACER

ele = InfoABB(p t rArbol)

SI (e l e.clave = c) ENTONCES

EnArb ol ← CIERTO

dato ← ele

SINO SI (c < el e.clave) ENTONCES

ptrAr bol ← IzqABB(pt r Arbol)

EN OTRO CASO

ptrAr bol ← DechABB(p t rArbol)

FINSI

FINMI ENTRAS

FINMetodología de Programación

Page 49: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

49

PROC Busc arABB( ↓arb ol:TABB; ↓c:TClave; ↑dato:TEle mento;

↑EnAr bol: LÓGICO)

/ / Soluci ón Recursi va

VARIABLES

ele:T Elemento

I NICIO

SI ( ABBVacio ( arbol) ) ENTONCES

EnArb ol ← FALSO

EN OTRO CASO

ele = InfoABB(a r bol)

SI (e l e.clave = c) ENTONCES

EnArb ol ← CIERTO

dato ← ele

SINO SI (c < el e.clave ) ENTONCES

Busca r ABB(IzqAB B(arbol),c , dato,EnAr bol)

EN OTRO CASO

Busca r ABB(DechABB(arbol), c ,dato,EnA r bol)

FINSI

FINSI

FIN

Metodología de Programación

Metodología de Programación

Árboles binarios debúsqueda

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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

50

Metodología de Programación

Árboles binarios debúsqueda

PROC InsertarA BB( ↓↑arbol : TABB; ↓dat o:TElemen t o)

// S olución It erativa

VARIABLES

nuevonodo , pav,pret: TABB

clavenuev a:Tclave

ele:TElem ento

Inic i o

nuevonodo ← NUEVO( TNodoABB)

nuevonodo^.i zq ← NULO

nuevonodo^.d er ← NULO

nuevonodo^.e l em ← dato

cl avenueva ← dato . clave

pav ← ar bol // Pu ntero Avan zado

pr et ← NULO // Pu ntero Retr asado

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

Metodología de Programación

Árboles binarios debúsqueda

MIENTRAS ( pav ≠ NULO) HACER

pret ← pav

ele = pav^.ele m

SI (c l avenueva < ele.cla ve ) ENTONCES

pav ← pav ^ .izq // Voy hacia el hijo iz quierdo

EN OTRO CASO

pav ← pav ^ .dch // Voy hacia el hijo de r echo

FINSI

FINMIENTRAS

ele = pre t ^.elem

SI (clave nueva < el e.clave ) ENTONCES

pret ^.izq ← nuevo nodo // In serto en e l hijo izq uierdo

EN OTRO CASO

pret ^.dch ← nuevo nodo // In serto en e l hijo izq uierdo

FINSI

FIN

Page 51: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

51

Metodología de Programación

Árboles binarios debúsqueda

PROC InsertarA BB( ↓↑arbol : TABB; ↓dat o:TElemen t o)VARIABLES

ele:T ElementoINIC I O // S olución R ecursiva

SI (ABBVacio ( arbol) ) ENTONCES arbol ← NUEVO(T NodoABB) arbol ^ .izq ← NULO arbol ^ .der ← NULO arbol ^ .elem ← dato

EN OTRO CASOele = InfoABB( arbol)SI (d ato.clave < ele.cla ve) ENTONCES

Inse r tarABB(ar bol^.izq, dato)EN OTRO CASO

Inse r tarABB(ar bol^.dch, dato)FINSI

FINSIFIN

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

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

Metodología de Programación

Árboles binarios debúsqueda

Consideraciones acerca de la operación de supr imir .

• 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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

52

Metodología de Programación

Árboles binarios debúsqueda

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 SuprimirA BB( ↓↑arbol : TABB; ↓c: TClave)VARIABLES // So l ución Ite r ativa

pav,pret: TABBINIC I O

pav ← arbolpret ← NULO //Bu sco el ele mentoMIENTRAS ( pav ≠ NULO) ∧ (p av^.elem.c l ave ≠ c) HACER

pret ← pavSI (c < pav^.e l em.clave) ENTONCES

pav ← pav^ . izqEN OTRO CASO

pav ← pav^ . derFINSI

FINMIENTRASSI (pav = NULO) ENTONCES

// No hacer Na da, ya que no hay na da que bor r arSINO SI ( pav = arbo l ) ENTONCES // equiv alente a: ( pret = NULO)

Supri mirNodo(a r bol)

SINO SI ( pret^.izq = pav) ENTONCESSupri mirNodo(p r et^.izq)

EN OTRO CASOSupri mirNodo(p r et^.der)

FINSIFIN

Metodología de Programación

Page 53: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

53

PROC SuprimirN odo( ↓↑arb ol:TABB)

Vari ables // So l ución Ite r ativa

temp,ant: TABB

Inic i o

temp ← arbol

SI (arbol ^ .der = NULO) ENTONCES

arbo l ← arb ol^.izq // C asos sin Hijos ó s i n Hijo de r echo

SINO SI ( arbol^.iz q = NULO) ENTONCES

arbo l ← arb ol^.der // C aso de Só l o Hijo d erecho

EN OTRO CASO // C aso Hijos derecho y izquierd o

temp ← arbo l ^.izq // Busco el mayor hij o derecho del hijo i zquierdo

ant ← arbol

MIENTRAS (tem p^.der <> NULO) HACER

ante r ior ← t emp

temp ← temp ^.der

FINMI ENTRAS

arbo l ^.elem ← temp^. elem

SI ( anterior = arbol) ENTONCES

ante r ior^.izq ← temp ^.izq

EN OTRO CASO

ante r ior^.der ← temp ^.izqFINS I

FINSI

ELIMINAR ( t emp)FIN

0 o 1 hijo

1 hijo

2 hijos

Metodología de Programación

PROC SuprimirA BB( ↓↑arbol : TABB; ↓c: TClave)

// S olución Re cursiva

VARIABLES

ele:TElem ento

INIC I O

SI (ABBVacio ( arbol) ) ENTONCES

// No hacer Na da, ya que no hay na da que bor r ar

EN OTRO CASO

ele = InfoABB( arbol)

SI (e l e.clave = c) ENTONCES

Supri mirNodo(ar bol)

SINO SI (c < e l e.clave ) ENTONCES

Supri mirABB(arb ol^.izq,c )

EN OTRO CASO

Supr i mirABB(ar bol^.dch, c)

FINSI

FINSI

FIN

Metodología de Programación

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

Page 54: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

54

PROC SuprimirN odo( ↓↑arbo l :TABB) // Solución RecursivaVari ables

t emp:TABBele :TEle mentoFUNC Mayor HijoDerec ho( ↓arbol: TipoABBúsq ueda):TEle mentoI NICIO // Solución Recursiva

SI (A BBVacio(D chABB(arbo l ))) ENTONCESRESULTADO ← InfoABB ( arbol)

EN OTRO CASORESULTADO ← MayorHi j oDerecho( DchABB(arb ol))

FINSIFIN

INIC I OSI (arbol ^ .der = NULO) ENTONCES

temp ← ar bolarbol ← ar bol^.izq // Ca sos sin Hi j os ó sin Hijo derec hoELIMI NAR(temp)

SINO SI ( arbol^.izq = NULO) ENTONCEStemp ← ar bolarbol ← ar bol^.der // Ca so de Sólo Hijo dere choELIMI NAR(temp)

EN OTRO CASO // Ca so Hijos d erecho y i zquierdoele ← MayorHijoDere cho(IzqABB ( arbol))arbol ^ .elem ← eleSupri mirABB(ar bol^.izq,e l e.clave)

FINSIFIN

0 o 1 hijo

1 hijo

Metodología de Programación

Metodología de Programación

Árboles binarios debúsqueda

Consideraciones acerca de la operación de impr imir .

• 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: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

55

Metodología de Programación

Árboles binarios debúsqueda

• 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 procesarlo

3) 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 PreOrden

3) 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 PostOrden

3) "Visitar" el valor del nodo raiz y procesarlo

PROC Imp_ I nOrd en( ↓arb ol:TA BB)

INIC I O

SI ( ¬ABBVacio( arbol ) ) ENTONCES

Imp_In Orden ( IzqA BB(ar bol) )

ImpNodo(Inf oABB(arbol ) )

Imp_In Orden ( DerABB(ar bol) )

FI NSI

FIN

PROC Imp_ PreOr den( ↓ar bol:T ABB)

INIC I O

SI ( ¬ABBVacio( arbol ) ) ENTONCES

ImpNodo(Inf oABB(arbol ) )

Imp_Pr eOrde n(Izq ABB(a r bol ) )

Imp_Pr eOrde n(Der ABB(a r bol ) )

FI NSI

FIN

Metodología de Programación

Page 56: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

56

PROC Imp_ PostO r den( ↓ar bol: TABB)

INIC I O

SI ( ¬ABBVacio( arbol ) ) ENTONCES

Imp_PostOrd en(Iz qABB(arbo l ))

Imp_PostOrd en(Dc hABB(arbo l ))

ImpNodo(Inf oABB(arbol ) )

FI NSI

Fin

PROC Impr i mirA BB( ↓arb ol:TA BB; ↓re c:TRe corr i do)

Inic i o

CASE re c SEA

in orde n: Im p_InO r den( arbo l )

pr eord en: I mp_Pr eOrde n(ar bol)

postor den: I mp_PostOr den( arbol )

FI NCASO

Fin

Fi n (* MAr bolB i nari oBusqueda *)

Metodología de Programación

Metodología de Programación

Árboles binarios debúsqueda

Ejemplo:

• El recorrido InOrden mostraría: BFGHPRSTWYZ

• El recorrido PreOrden: PFBHGSRYTWZ

• El recorrido PostOrden: BGHFRWTZYSP

Y

T

P

F

B H

G

Z

W

R

S

Page 57: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

57

Metodología de Programación

Árboles binarios debúsqueda

Nivel de utilización

• Aplicaciones en las que estén implicas operacionesde búsqueda de elementos

• Ejemplo: Supongamos que deseamos implementarun 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 Programación

Árboles binarios debúsqueda

ALGORITMO Dicc i onario

DESE MABB IMPORTA TABB, CrearABB , Dest r uirA BB, BuscarA BB,Inse r tarABB, S uprimirABB , Imprimir ABB

CONSTANTES

MAXCAD = 20

TIPOS

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

TDic = TA BB

Tclave = TCadena

TElemento = REGISTRO

clave : TClave // Pa l abra ing l és

tradu cción: TCa dena // Pa l abra Espa ñol

FINREGISTRO

Page 58: Estructuras de Datos Avanzadas - · PDF file... Datos organizados por Posición Pilas , Colas y Listas 2) Datos organizados por ... • Estudio de las Estructuras de Datos: Definición

58

Metodología de Programación

Árboles binarios debúsqueda

PROC InsPalDic ( ↓↑d:Tdic; ↓pal: TEl emento)

INIC I O

I nsertarA BB(d,pal)

FIN

PROC BuscaPalD i c( ↓d:TDic ; ↓ingl és: TClave ; ↑pal: TElem ento;

↑enco ntrado: LÓGI CO)

INIC I O

BuscarAB B(d,inglés , pal,encon t rado)

FIN

PROC BorrarPal Dic( ↓↑d:TD i c; ↓ingl és:TClave)

INIC I O

Suprimir ABB(d,ingl és)

FIN

Metodología de Programación

Bibliografía6 7 8 9 : ; < = > ? 8 9 : ; @ A B : C : : D @ E F G F H I J K I L M

N J O P Q K O Q P I J R S T I O U J F E V W X Y Z [ ; Z \ ] \ ^ Y F _ ] ` a [ b cd \ e e f C Y g V a [ h V a \ ] [ Y [ Z V ; i j [ k [ @ l = < = F

6 7 m n D 9 o o ? m n D 9 A ; E @ : F H P U p P I q I K r s t S t u v v wx L p U P r O q U J y S J O P Q K O Q P I J R S R I O U J M U z { S O U J w _ ] ` a [ b d \ e e @

| o o o F6 7 E 9 } C o o ? E 9 } C G d @ ~ F � S J U L Q K r s t R S � P U z L S q I J K U t

u v v w E V W X Y Z [ ; Z \ ] \ ^ Y F � a V Y g \ ] V d [ e e @ | o o o F6 7 E � � n o l ? E � � n � E � � � � @ � F N L L S t p Q I { S R S

� P U p P I q I K r s t u v v F ; Z \ ] \ ^ Y ; i j V ] \ [ e @ 9 Z \ i i � Y c ~ V i e V B @| o o l F