Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pilas Colas PDF
Pilas Colas PDF
Pilas Colas PDF
Avanzadas
Contenido del Tema
T
5.1. Introducción
E 5.2. Pilas
M 5.3. Colas
5.4. Listas
A 5.5. Arboles Binarios
Arboles Binarios de Búsqueda
5
Programación Modular
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
Programación Modular 2
1
Introducción
Programación Modular 3
Pilas
Definición
• Pila: Grupo Ordenado, (de Añadir Eliminar
acuerdo al tiempo que llevan
en la pila) de Elementos
Homogéneos (todos del
mismo tipo).
• Acceso a la Pila: añadir y Cabeza
eliminar elementos, SÓLO a
través de la CABEZA de la
Pila
Pila
• Estructura LIFO (Last Input
First Output)
Programación Modular 4
2
Pilas. Operaciones
Programación Modular 5
Pilas. Operaciones 2
...
// Crea una pila vacía
Crear()
//Operación lógica que nos dice si una pila está vacía o no
B EstáVacía ()
//Operación lógica que nos dice si una pila está llena o no.
//Necesaria en determinadas implementaciones
B EstáLlena()
// Destruye una pila previamente creada
Destruir()
FIN CPila
Programación Modular 6
3
Pilas. Aplicaciones
Aplicaciones
• Ejemplo1: Leer una secuencia de caracteres desde teclado
e imprimirla al revés
• Ejemplo2: Verificar si una cadena de caracteres está
balanceada en paréntesis o no
abc(defg(ijk))(l(mn)op)qr SI
abc(def))ghij(kl)m NO
• Ejemplo3: Reconocimiento del Lenguaje,
L={W$W´ / W es una cadena de caracteres y W´es su
inversa} (Suponemos que $ no está ni en W ni en W´)
Programación Modular 7
Pilas. Ejemplo1
Algoritmo Inverso
Tipos
TipoElemento = C
Variables
TipoElemento c
CPila pila // Se llama automáticamente al constructor
Inicio
Leer(c)
MIENTRAS c != CHR(13)HACER
pila.Apilar(c)
Leer(c)
FINMIENTRAS
MIENTRAS NO (pila.EstáVacía()) HACER
c = pila.Cima()
pila.Desapilar()
Escribir(c)
FINMIENTRAS
pila.Destruir()
Fin
Programación Modular 8
4
Pilas. Ejemplo2
Algoritmo Balanceo SI c = = ‘)’ ENTONCES
Tipos SI (!pila.EstáVacía()) ENTONCES
TipoElemento = C pila.Desapilar ()
Variables SINO
TipoElemento c bien = FALSO
CPila pila FINSI
B bien FINSI
Inicio FINSI
bien = VERDADERO Leer(c)
Leer(c) FINMIENTRAS
MIENTRAS (bien Y (c!=CHR(13))) SI bien Y pila .EstáVacía() ENTONCES
HACER Escribir(“cadena balanceada “)
SI c== ‘(’ ENTONCES SINO
pila.Apilar(c) Escribir(“cadena no balanceada”)
SINO FINSI
pila.Destruir()
Fin
Programación Modular 9
Pilas. Ejemplo3
Programación Modular 10
5
Pilas. Aplicaciones
Programación Modular 11
Pilas. Aplicaciones
Programación Modular 12
6
Pilas. Aplicaciones
Pilas. Ejemplo4
Algoritmo B Operando(C c)
Inicio
DEVOLVER (c=='+' O c=='*' O c=='/' O c=='-');
Fin Operando
Tipos Algoritmo Operador(c:$):Z
C TipoArray[1..20] Inicio
Z TipoElemento CASO c SEA
'A' : DEVOLVER(5)
'B' : DEVOLVER(7)
'C' : DEVOLVER(-1)
'D' : DEVOLVER(11)
SINO
DEVOLVER 0
FINCASO
Fin Operando
Programación Modular 14
7
Pilas. Ejemplo4
Algoritmo Z Postfija(E TipoArray exp, CASO c SEA
E Z ultimo) ‘+’ : pila.Apilar(op1+op2)
Variables ‘-’ : pila.Apilar(op1-op2)
CPila pila ‘*’ : pila.Apilar(op1*op2)
Z i, op1, op2, result ‘/’ : pila.Apilar(op1/op2)
C c FINCASO
Inicio SINO
PARA i = 1 HASTA ultimo HACER pila.Apilar(Operando(c))
c = exp[i] FINSI
SI Operador(c) ENTONCES FINPARA
op2 = pila.Cima() result = pila.Cima()
pila.Desapilar() pila.Destruir()
op1 = pila.Cima() DEVOLVER result
pila.Desapilar() Fin
Programación Modular 15
Pilas. Implementación
Implementación
1) Con un Array
• Array estructura adecuada Elementos Homogéneos
• Elementos almacenados de forma Secuencial
Constantes
MaxPila=100
Tipos
Z TipoElemento
TipoElemento TDatos[1..MaxPila]
Programación Modular 16
8
Pilas. Implementación
Programación Modular 17
Pilas. Implementación
CONSTANTES
Cabeza=0; MaxPila=100;
TIPOS
TipoElemento TDatos[Cabeza..MaxPila]
3 5 3 2
.......
2 Cabeza
[0] [1] [2] [3] [99] [100] 3
5
Cabeza Basura
Programación Modular 18
9
Pilas. Implementación
k 5 13 8 .........
Cabeza 1 2 Elementos k MaxPila
Programación Modular 19
Pilas.Implementación
Programación Modular 20
10
Pilas.Implementación
B EstáVacia ()
INICIO
DEVOLVER (cabeza == 0)
FIN EstáVacia
B EstáLlena()
INICIO
DEVOLVER (cabeza == MAXPILA)
FIN EstáLlena
Programación Modular 21
Pilas.Implementación
Apilar(E TipoElemento elem)
INICIO // precondición: la pila no ha de estar
llena
cabeza = cabeza + 1
datos[cabeza] = elem
FIN Apilar
Desapilar()
INICIO // precondición: la pila no ha de estar
vacía
cabeza = cabeza - 1
FIN Desapilar
TipoElemento Cima()
INICIO // precondición: la pila no ha de estar
vacía
DEVOLVER datos[cabeza]
FIN Cima
FIN CPila
Programación Modular 22
11
Pilas.Implementación
Programación Modular 23
Pilas.Implementación
Programación Modular 24
12
Pilas. Implementación
Programación Modular 25
Pilas.Implementación
cabeza
10 8 10
8
Programación Modular 26
13
Pilas. Implementación
IMPLEMENTACION CLASE CPila
TIPOS
REGISTRO NodoPila
TipoElemento dato
NodoPila *sig
FINREGISTRO
ATRIBUTOS
NodoPila *cabeza
METODOS
Crear ()
INICIO
cabeza = NULO
FIN Crear
B EstáVacia ()
INICIO
DEVOLVER (cabeza == NULO)
Fin EstáVacía
Programación Modular 27
Pilas.Implementación
Programación Modular 28
14
Pilas.Implementación
Suponiendo que
la pila tiene al Desapilar ()
menos un VAR
elemento NodoPila *ptr
INICIO
ptr = cabeza
cabeza = cabeza->sig
Liberar(ptr)
FIN Desapilar
TipoElemento Cima ()
INICIO
DEVOLVER cabeza->dato
FIN Cima
Programación Modular 29
Pilas. Implementación
Controlando la Los métodos de la misma
posibilidad de que clase se pueden llamar
la pila este vacía como:
Método() o este.Metodo()
Programación Modular 30
15
Pilas.Implementación
Destruir ()
VAR
NodoPila *ptr
INICIO
MIENTRAS(cabeza!=NULO) HACER
ptr=cabeza
pila=cabeza->sig
Liberar(ptr)
FINMIENTRAS
FIN Destruir
Programación Modular 31
Colas
Definición
• Cola: es un grupo ordenado (con respecto al tiempo que
llevan en él) de elementos homogéneos (todos del mismo
Tipo)
• Acceso: los elementos se añaden por un extremo (final) y
se sacan por el otro extremo (frente)
• Estructura FIFO (First Input First Output)
Sacar Meter
Frente Final
Programación Modular 32
16
Colas. Interfaz
Programación Modular 33
Colas. Operaciones
B EstáLlena()
// Devuelve VERDADERO si la cola no permite insertar
// más elementos. FALSO en caso contrario.
Encolar(E TipoElemento elem)
// Introduce un elemento al final de la cola
Desencolar()
//Saca el elemento del frente de la cola
TipoElemento Frente()
// Devuelve el elemento del frente de la cola
Destruir()
// Destruye una cola previamente creada
FIN CCOLA
Programación Modular 34
17
Colas. Aplicaciones
Ejemplo: Reconocimiento del lenguaje.
L={W$W/W no contiene a $}
TIPOS
TipoElemento = C // caracteres
VARIABLES
B bien = VERDADERO
TipoElemento el
CCola cola
N ind
INICIO
ind = 1
MIENTRAS (cad[ind] <> ‘$’) Y (cad[ind] <> ‘\n’) HACER
cola.Encolar(cad[ind])
INC(ind)
FINMIENTRAS
Programación Modular 35
Colas. Aplicaciones
SI cad[ind] <> ‘\n’ ENTONCES
INC(ind)
MIENTRAS (bien Y (c1<>’\n’) HACER
SI cola.EstaVacia() ENTONCES
bien = FALSO
SI NO
SI (cad[ind] <> cola.Frente()) ENTONCES
bien = FALSO
SI NO
cola.Desencolar()
INC(ind)
FINSI
FINSI
FINMIENTRAS
SI NO
bien = FALSO
FINSI
FIN Lenguaje_L
Programación Modular 36
18
Colas. Implementación
Implementación
1) Con un Array
• Se deja fijo el frente de la cola y se mueve el final a medida que se
añaden nuevos elementos (Idem Pila )
• Las operaciones Encolar, Frente, EstáVacía y EstáLlena se
implementan de una forma similar a sus análogas en Pilas
• La operación de Desencolar es más complicada: cada vez que
saquemos un elemento de la cola se han de desplazar el resto una
posición en el array, para hacer coincidir el frente con la primera
posición del array
• Ventaja Simplicidad
• Inconveniente Ineficiente (colas con muchos elementos o
elementos grandes)
Programación Modular 37
Colas. Implementación
• Ejemplo:
1 2 3 4 ..........
Encolar(cola,”A”) A Final=1
1 2 3 4 ..........
Encolar(cola,”B”) A B Final=2
1 2 3 4 ..........
Desencolar(cola) B
1 2 3 4 ..........
Desplazar B Final=1
1 2 3 4 ..........
Programación Modular 38
19
Colas. Implementación
Solución:
Programación Modular 39
Colas. Implementación
• Ejemplo:
Frente=1
Encolar(cola,”A”) A Final=1
1 2 3 4 ..........
Frente=1
Encolar(cola,“B”) A B
Final=2
1 2 3 4 ..........
Frente=1
Encolar(cola,“C”) A B C Final=3
1 2 3 4 ..........
Frente=2
Desencolar(cola) B C Final=3
1 2 3 4 ..........
Programación Modular 40
20
Colas. Implementación
Solución:
• Tratar al array como una Estructura Circular, donde la
última posición va seguida de la primera Evitamos que
el final de la cola alcance el final físico del array y no esté
llena
• Operación Encolar Añade elementos a las posiciones
del array e incrementa el índice final
• Operación Desencolar Más sencilla. Sólo se
incrementa el índice frente a la siguiente posición
Programación Modular 41
Colas. Implementación
• Ejemplo:
1 2 1 2
G Frente=5
Frente=5
6 H 3 Encolar(cola,”G”) 6 H 3 Final=1
Final=6
B B
5 4 5 4
1 2 1 2
Frente=5 Frente=6
6 H 3 Desencolar(cola) 6 H 3
Final=6 Final=6
B
5 4 5 4
Programación Modular 42
21
Colas. Implementación
1 2
1 2
Frente=3 Frente=4
6 3 Desencolar(cola) 6 3
B Final=3
Final=3
5 4
5 4 !!Cola Vacía!!
Programación Modular 43
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
Programación Modular 44
22
Colas. Implementación
Programación Modular 45
Colas. Implementación
1 2
M A
Frente=3
Final=2 6 H res 3
B S
5 4
Programación Modular 46
23
Colas. Implementación
Frente=4 Frente=5
6 3 Desencolar(cola) 6 3
Final=5 Final=5
B res res
5 4 5 4
Programación Modular 47
Colas. Implementación
frente Maxcola
final 2 5 13 ...................
1 2 MaxCola
numelems 2
Programación Modular 48
24
Colas.Implementación
Programación Modular 49
Colas. Implementación
MÉTODOS
Crear ()
INICIO
NumElems = 0
Principio = 1
Final = 0
FIN Crear
Destruir()
INICIO
FIN Destruir
Programación Modular 50
25
Colas. Implementación
B EstáVacia ()
INICIO
DEVOLVER NumElems == 0
FIN EstáVacia
B EstáLlena ()
INICIO
DEVOLVER NumElems == MAXCOLA
FIN EstáLlena
Programación Modular 51
Colas. Implementación
Desencolar ()
INICIO
SI NOT EstáVacía() ENTONCES
DEC(NumElems)
Principio = (Principio MOD MAXCOLA) + 1
FINSI
FIN Desencolar
Programación Modular 52
26
Colas. Implementación
TipoElemento Frente ()
VARIABLES
TipoElemento elem
INICIO
SI NO EstaVacia() ENTONCES
elem = elementos[Principio]
FINSI
DEVOLVER elem
FIN Frente
FIN CCOLA
Programación Modular 53
Colas. Implementación
Frente Final
Programación Modular 54
27
Colas. Implementación
ATRIBUTOS
TipoCola Principio
TipoCola Final
Programación Modular 55
Colas. Implementación
MÉTODOS
Crear ()
INICIO
Principio = NULO
Final = NULO
FIN Crear
B EstáVacía()
INICIO
DEVOLVER Principio == NULO
FIN EstáVacía
Programación Modular 56
28
Colas.Implementación
Destruir ()
VARIABLES
TipoCola nodo, siguiente
INICIO
siguiente = Principio
MIENTRAS siguiente <> NULO HACER
nodo = siguiente
siguiente = siguiente->sig
LIBERAR(nodo)
FINMIENTRAS
Principio = NULO
Final = NULO
FIN Destruir
Programación Modular 57
Colas. Implementación
Programación Modular 58
29
Colas.Implementación
Desencolar ()
VARIABLES
TipoPuntero temp
INICIO
SI NO EstaVacía() ENTONCES
temp = Principio
Principio = Principio ->sig
SI Principio == NULO ENTONCES
Final = NULO
FINSI
LIBERAR(temp)
FINSI
FIN Desencolar
Programación Modular 59
Colas.Implementación
TipoElemento Frente ()
VARIABLES
TipoElemento elem
INICIO
SI NO EstáVacía() ENTONCES
elem = Principio->valor
FINSI
DEVOLVER elem
FIN Frente
FIN Ccola
Programación Modular 60
30
Colas.Implementación
Implementación
Programación Modular 61
31