SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
1
Programación Modular
T
E
M
A
5
Estructuras de Datos
Avanzadas
Contenido del Tema
5.1. Introducción
5.2. Pilas
5.3. Colas
5.4. Listas
5.5. Arboles Binarios
Arboles Binarios de Búsqueda
Programación Modular 2
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
2
Programación Modular 3
Introducción
• Estudio de las Estructuras de Datos:
Definición de la Estructura de Datos e
identificación de su Conjunto de
Operaciones
Presentación de Aplicaciones
Desarrollo de diversas Implementaciones
Programación Modular 4
Pilas
Definición
• Pila: Grupo Ordenado, (de
acuerdo al tiempo que llevan
en la pila) de Elementos
Homogéneos (todos del
mismo tipo).
• Acceso a la Pila: añadir y
eliminar elementos, SÓLO a
través de la CABEZA de la
Pila
• Estructura LIFO (Last Input
First Output)
Pila
Cabeza
Añadir Eliminar
3
Programación Modular 5
Pilas. Operaciones
INTERFAZ CLASE CPila
TIPOS
TipoElemento ... // cualquier tipo de datos
METODOS
// Añade un elemento por la cabeza de la pila
Apilar( E TipoElemento elem)
// Saca un elemento por la cabeza de la Pila
Desapilar()
// Devuelve el elemento de la cabeza de la Pila
TipoElemento Cima()
...
Programación Modular 6
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
4
Programación Modular 7
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 8
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
5
Programación Modular 9
Pilas. Ejemplo2
Algoritmo Balanceo
Tipos
TipoElemento = C
Variables
TipoElemento c
CPila pila
B bien
Inicio
bien = VERDADERO
Leer(c)
MIENTRAS (bien Y (c!=CHR(13)))
HACER
SI c== ‘(’ ENTONCES
pila.Apilar(c)
SINO
SI c == ‘)’ ENTONCES
SI (!pila.EstáVacía()) ENTONCES
pila.Desapilar()
SINO
bien = FALSO
FINSI
FINSI
FINSI
Leer(c)
FINMIENTRAS
SI bien Y pila.EstáVacía() ENTONCES
Escribir(“cadena balanceada “)
SINO
Escribir(“cadena no balanceada”)
FINSI
pila.Destruir()
Fin
Programación Modular 10
Pilas. Ejemplo3
Algoritmo Lenguaje_L
Tipos
TipoElemento = $
Variables
TipoElemento c1, c2
CPila pila
B bien
Inicio
Leer(c1)
MIENTRAS (c1 != ‘$’) HACER
pila.Apilar(c1)
Leer(c1)
FINMIENTRAS
Leer(c1)
bien = VERDADERO
MIENTRAS (bien AND
(c1 <> CHR(13))) HACER
SI pila.EstáVacía()ENTONCES
bien= FALSO
SINO
c2 = pila.Cima()
pila.Desapilar()
SI (c1 != c2) ENTONCES
bien = FALSE
SINO
Leer(c1)
FINSI
FINSI
FINMIENTRAS
SI (bien AND pila.EstáVacía())ENTONCES
Escribir (“ Si pertenece”)
SINO
Escribir (“No pertenece”)
FINSI
pila Destruir()
Fin
6
Programación Modular 11
Pilas. Aplicaciones
• Aplicaciones complejas que se pueden solucionar con
pilas: Expresiones Algebraicas
Operadores: +, -, *, /
Operandos: Letras mayúsculas
• Notación Infija:
• 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
Programación Modular 12
Pilas. Aplicaciones
Notación Prefija
• El operador binario esta situado
justo antes de sus dos
operandos +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 Postfija
• El operador binario está situado
justo después de sus dos
operandos 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*
7
Programación Modular 13
Pilas. Aplicaciones
• Ventaja: Usando expresiones prefijas y postfijas no son
necesarias reglas de precedencia, ni uso de paréntesis.
Las gramáticas que las generan son muy simples, y los
algoritmos que las reconocen y evalúan muy fáciles
• Ejemplo 4: Algoritmo que evalúa una expresión en notación
Postfija
1)Usaremos una pila
2)La expresión postfija se almacenará en un array y será
correcta
3)Los operandores serán: +, -, * y /
4)Los operandos serán letras mayúsculas (a cada una le
podemos asignar un valor)
Programación Modular 14
Pilas. Ejemplo4
Tipos
C TipoArray[1..20]
Z TipoElemento
Algoritmo B Operando(C c)
Inicio
DEVOLVER (c=='+' O c=='*' O c=='/' O c=='-');
Fin Operando
Algoritmo Operador(c:$):Z
Inicio
CASO c SEA
'A' : DEVOLVER(5)
'B' : DEVOLVER(7)
'C' : DEVOLVER(-1)
'D' : DEVOLVER(11)
SINO
DEVOLVER 0
FINCASO
Fin Operando
8
Programación Modular 15
Pilas. Ejemplo4
Algoritmo Z Postfija(E TipoArray exp,
E Z ultimo)
Variables
CPila pila
Z i, op1, op2, result
C c
Inicio
PARA i = 1 HASTA ultimo HACER
c = exp[i]
SI Operador(c) ENTONCES
op2 = pila.Cima()
pila.Desapilar()
op1 = pila.Cima()
pila.Desapilar()
CASO c SEA
‘+’ : pila.Apilar(op1+op2)
‘-’ : pila.Apilar(op1-op2)
‘*’ : pila.Apilar(op1*op2)
‘/’ : pila.Apilar(op1/op2)
FINCASO
SINO
pila.Apilar(Operando(c))
FINSI
FINPARA
result = pila.Cima()
pila.Destruir()
DEVOLVER result
Fin
Programación Modular 16
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]
9
Programación Modular 17
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 pasar
como parámetro adicional a todas las operaciones sobre la
pila
2) Extender el array, en pila[0] almacenaremos el índice del
elemento que ocupa la cabeza actual
Programación Modular 18
CONSTANTES
Cabeza=0; MaxPila=100;
TIPOS
TipoElemento TDatos[Cabeza..MaxPila]
Pilas. Implementación
[0] [1] [2] [3] [99] [100]
Cabeza
3 5 3 2
.......
Basura
2
3
5
Cabeza
10
Programación Modular 19
Pilas. Implementación
• Inconveniente: Solo es posible implementar una pila de
ordinales (no de cualquier otro tipo de datos)
• 3) Solución: Registro = cabeza + array de datos
1 2 k MaxPila
5 13 8 .........k
Cabeza Elementos
Programación Modular 20
Pilas.Implementación
IMPLEMENTACION CLASE CPila
CONSTANTES
MAXPILA = // Valor adecuado
ATRIBUTOS
Z cabeza
TipoElemento datos[1..MAXPILA]
MÉTODOS
Crear ()
INICIO
cabeza = 0
FIN Crear
Destruir()
INICIO
cabeza=0
FIN Destruir
11
Programación Modular 21
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 22
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
12
Programación Modular 23
Pilas.Implementación
// Sin precondición. Mete un elemento de la pila si no
está llena
Apilar(E TipoElemento elem;S B llena)
INICIO
llena = EstáLlena()
SI NOT llena ENTONCES
cabeza = cabeza + 1
datos[cabeza] = elem
FINSI
FIN Apilar
Programación Modular 24
Pilas.Implementación
// Sin precondición. Saca un elemento de la pila si no
está vacía
Desapilar(S B vacia)
INICIO
vacia = EstáVacia()
SI NOT vacia ENTONCES
cabeza = cabeza – 1
FINSI
FIN Desapilar
13
Programación Modular 25
Pilas. Implementación
// Sin precondición. Mira el 1er elemento de la pila si no
está vacía
TipoElemento Cima(S B vacia)
VAR
TipoElemento elem
INICIO
vacia = PilaVacia()
SI NOT vacia ENTONCES
elem=datos[cabeza]
FINSI
// Sin precondición. Devuelve el elemento de la cima de la
// pila si no está vacía. Si está vacía devuelve un valor
// basura
devolver elem;
FIN Cima
Programación Modular 26
Pilas.Implementación
2) Con una Lista Enlazada de Punteros
• Comienzo de una lista enlazada Cabeza de la Pila
• Se inserta y se extrae por el inicio de la lista
10 8
cabeza
10
8
14
Programación Modular 27
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 28
Pilas.Implementación
Apilar (E TipoElemento elem)
VAR
NodoPila *nuevonodo
INICIO
Asignar(nuevonodo)
nuevonodo->dato = elem
nuevonodo->sig = cabeza
cabeza = nuevonodo
FIN Apilar
15
Programación Modular 29
Pilas.Implementación
Desapilar ()
VAR
NodoPila *ptr
INICIO
ptr = cabeza
cabeza = cabeza->sig
Liberar(ptr)
FIN Desapilar
TipoElemento Cima ()
INICIO
DEVOLVER cabeza->dato
FIN Cima
Suponiendo que
la pila tiene al
menos un
elemento
Programación Modular 30
Pilas. Implementación
Desapilar (S B vacia)
VAR
NodoPila *ptr
INICIO
vacia = EstáVacia()
SI NO vacia ENTONCES
ptr = cabeza
cabeza = cabeza->sig
Liberar(ptr)
FINSI
FIN Desapilar
Controlando la
posibilidad de que
la pila este vacía
TipoElemento Cima (S B vacia)
VAR
TipoElemento elem
INICIO
vacia = EstáVacía()
SI NO vacia ENTONCES
elem = cabeza->dato
FINSI
DEVOLVER elem
FIN Cima
Los métodos de la misma
clase se pueden llamar
como:
Método() o este.Metodo()
16
Programación Modular 31
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 32
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)
Frente Final
MeterSacar
17
Programación Modular 33
Colas. Interfaz
INTERFAZ CLASE CCola
TIPOS
TipoElemento=//cualquier tipo de datos
MÉTODOS
Crear()
// Crea una cola vacía
B EstáVacía()
//Devuelve VERDADERO si la cola no contiene
//elementos. FALSO en caso contrario.
Programación Modular 34
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
18
Programación Modular 35
Colas. Aplicaciones
Ejemplo: Reconocimiento del lenguaje.
L={W$W/W no contiene a $}
B ALGORITMO Lenguaje_L(E C cad[]
IMPORTA CCola
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 36
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
19
Programación Modular 37
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 38
Colas. Implementación
• Ejemplo:
1 2 3 4 ..........
1 2 3 4 ..........
Final=1
1 2 3 4 ..........
Encolar(cola,”A”) A
1 2 3 4 ..........
A BEncolar(cola,”B”) Final=2
Desencolar(cola) B
1 2 3 4 ..........
B Final=1Desplazar
20
Programación Modular 39
Solución:
• Utilizar un índice para el frente y otro para el final y
permitir que ambos fluctúenpor el array
• Ventaja: operación Desencolar 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
Programación Modular 40
Colas. Implementación
• Ejemplo:
1 2 3 4 ..........
1 2 3 4 ..........
Encolar(cola,”A”) A
A BEncolar(cola,“B”)
Frente=1
Final=1
Frente=1
Final=2
1 2 3 4 ..........
A BEncolar(cola,“C”) C
Frente=1
Final=3
1 2 3 4 ..........
BDesencolar(cola) C
Frente=2
Final=3
21
Programación Modular 41
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
Colas. Implementación
Programación Modular 42
Colas. Implementación
• Ejemplo:
1 2
3
45
6
B
H
1 2
3
45
6
B
H
1 2
3
45
6 H
Frente=6
Final=6
Frente=5
Final=6
1 2
3
45
6
B
HEncolar(cola,”G”)
G Frente=5
Final=1
Frente=5
Final=6
Desencolar(cola)
22
Programación Modular 43
Colas. Implementación
1 2
3
45
6
B
HEncolar(cola,”L”)
M Frente=4
Final=3
¿Cómo sabemos si la cola está vacía o llena?
1 2
3
45
6
B
H
Frente=4
Final=2
M A
S
L
A
S
!!Cola llena!!
1 2
3
45
6 B
1 2
3
45
6
Frente=4
Final=3
Frente=3
Final=3
Desencolar(cola)
!!Cola Vacía!!
Programación Modular 44
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
2) Frente apunte a la casilla del array que precede a
la del elemento frente de la cola
23
Programación Modular 45
Colas. Implementación
Con la segunda solución es necesario que la posición a la que
apunta frente esté Reservada
1 2
3
45
6
B
H
Frente=4
Final=6
1 2
3
45
6
B
HEncolar(cola,”G”)
G Frente=4
Final=1
res res
Programación Modular 46
Colas. Implementación
¿Cómo saber si la cola está llena?
Cola Llena: Frente == Final + 1
1 2
3
45
6
B
H
Frente=3
Final=2
M A
S
res
24
Programación Modular 47
Colas. Implementación
¿Cómo saber si la cola está vacía?
Cola Vacía: Frente == Final
• Crear la cola (inicializarla vacía): frente =Maxcola (índice
del array que precede al elemento frente de la cola) y
final=Maxcola Cola Vacía correcto (frente == final)
1 2
3
45
6
B
1 2
3
45
6
Frente=5
Final=5
Frente=4
Final=5
Desencolar(cola)
res res
Programación Modular 48
Colas. Implementación
• Definiremos como atributos los índices frente y final y
el número de elementos, junto con el array que contendrá
los elementos de la cola
1 2 MaxCola
5 13 ...................
frente
final 2
Maxcola
numelems 2
25
Programación Modular 49
Colas.Implementación
IMPLEMENTACIÓN CLASE CCola
CONSTANTES
MAXCOLA = 100
ATRIBUTOS
TipoElemento elementos[1..MAXCOLA]
N NumElems
N Principio
N Final
Programación Modular 50
Colas. Implementación
MÉTODOS
Crear ()
INICIO
NumElems = 0
Principio = 1
Final = 0
FIN Crear
Destruir()
INICIO
FIN Destruir
26
Programación Modular 51
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 52
Colas. Implementación
Encolar (E TipoElemento Elem)
INICIO
SI NO EstáLLena() ENTONCES
INC(NumElems)
Final = (Final MOD MAXCOLA) + 1
elementos[Final] = elem
FINSI
Fin Encolar
Desencolar ()
INICIO
SI NOT EstáVacía() ENTONCES
DEC(NumElems)
Principio = (Principio MOD MAXCOLA) + 1
FINSI
FIN Desencolar
27
Programación Modular 53
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 54
Colas. Implementación
2) Con listas enlazadas con Punteros
• Usamos dos atributos de tipo puntero, frente y final, que
apunten a los nodos que contienen los elementos frente y
final
• ¿Que sucedería si intercambiáramos las posiciones de
frente y final en la lista enlazada?
10 8 4
Frente Final
28
Programación Modular 55
Colas. Implementación
IMPLEMENTACIÓN CLASE CCola
TIPOS
NodoCola *TipoCola
REGISTRO NodoCola
TipoElemento valor
TipoCola sig
FINREGISTRO
ATRIBUTOS
TipoCola Principio
TipoCola Final
Programación Modular 56
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
29
Programación Modular 57
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 58
Colas. Implementación
Encolar(E TipoElemento elem)
VARIABLES
TipoPuntero nuevonodo
INICIO
ASIGNAR(nuevonodo)
nuevonodo->valor = elem
nuevonodo->sig = NULO
SI EstáVacia() ENTONCES
Principio = nuevonodo
EN OTRO CASO
Final->sig = nuevonodo
FINSI
Final = nuevonodo
FIN Encolar
30
Programación Modular 59
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 60
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
31
Programación Modular 61
Colas.Implementación
• Con una lista enlazada circular es muy fácil implementar
una Cola, sin tener que disponer de un registro con dos
campos para el frente y para el final.
c
Frente Final
Implementación

Más contenido relacionado

La actualidad más candente (18)

Listasenlazadas 100517143015-phpapp02
Listasenlazadas 100517143015-phpapp02Listasenlazadas 100517143015-phpapp02
Listasenlazadas 100517143015-phpapp02
 
Colas
ColasColas
Colas
 
2- TDA Listas
2- TDA Listas2- TDA Listas
2- TDA Listas
 
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
PILAS
PILASPILAS
PILAS
 
Codigo para implementar pilas en java
Codigo para implementar pilas en javaCodigo para implementar pilas en java
Codigo para implementar pilas en java
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pila
 
Pilas En C++
Pilas En C++Pilas En C++
Pilas En C++
 
Fila,pila y cola ..
Fila,pila y cola ..Fila,pila y cola ..
Fila,pila y cola ..
 
Pilas
PilasPilas
Pilas
 
S6-EDD-3.2 Pilas y colas
S6-EDD-3.2 Pilas y colasS6-EDD-3.2 Pilas y colas
S6-EDD-3.2 Pilas y colas
 
Pilas Colas
Pilas ColasPilas Colas
Pilas Colas
 
Tema - Pilas
Tema  - PilasTema  - Pilas
Tema - Pilas
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
 
Estructura de datos I pilas
Estructura de datos I pilasEstructura de datos I pilas
Estructura de datos I pilas
 
Listas Pilas Colas
Listas Pilas ColasListas Pilas Colas
Listas Pilas Colas
 

Destacado

PAILAS Y COLAS EN LA ULEAM FVD
PAILAS Y COLAS EN LA ULEAM FVDPAILAS Y COLAS EN LA ULEAM FVD
PAILAS Y COLAS EN LA ULEAM FVDFranco Snipes
 
Programación Multiparadigma, conveniencia y actualidad
Programación Multiparadigma, conveniencia y actualidadProgramación Multiparadigma, conveniencia y actualidad
Programación Multiparadigma, conveniencia y actualidadJosé Albert
 
Métodos de programación, diagramas y pseudocódigos
Métodos de programación, diagramas y pseudocódigos Métodos de programación, diagramas y pseudocódigos
Métodos de programación, diagramas y pseudocódigos kira-akira
 
La crisis del software
La crisis del softwareLa crisis del software
La crisis del softwareOberdose
 
Leyes de la logica e inferencias
Leyes de la  logica  e inferenciasLeyes de la  logica  e inferencias
Leyes de la logica e inferenciasMaria Gaitan
 
Sistema para el control de ventas e inventarios
Sistema para el control de ventas e inventariosSistema para el control de ventas e inventarios
Sistema para el control de ventas e inventariosAidil Sanchez
 
Programación Modular y Estructyrada
Programación Modular y EstructyradaProgramación Modular y Estructyrada
Programación Modular y Estructyradaguestefc95b
 
LinkedIn’s Culture of Transformation
LinkedIn’s Culture of TransformationLinkedIn’s Culture of Transformation
LinkedIn’s Culture of TransformationPat Wadors
 

Destacado (11)

PAILAS Y COLAS EN LA ULEAM FVD
PAILAS Y COLAS EN LA ULEAM FVDPAILAS Y COLAS EN LA ULEAM FVD
PAILAS Y COLAS EN LA ULEAM FVD
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
2. algoritmos
2. algoritmos2. algoritmos
2. algoritmos
 
Programación Multiparadigma, conveniencia y actualidad
Programación Multiparadigma, conveniencia y actualidadProgramación Multiparadigma, conveniencia y actualidad
Programación Multiparadigma, conveniencia y actualidad
 
Métodos de programación, diagramas y pseudocódigos
Métodos de programación, diagramas y pseudocódigos Métodos de programación, diagramas y pseudocódigos
Métodos de programación, diagramas y pseudocódigos
 
La crisis del software
La crisis del softwareLa crisis del software
La crisis del software
 
Programación modular
Programación modularProgramación modular
Programación modular
 
Leyes de la logica e inferencias
Leyes de la  logica  e inferenciasLeyes de la  logica  e inferencias
Leyes de la logica e inferencias
 
Sistema para el control de ventas e inventarios
Sistema para el control de ventas e inventariosSistema para el control de ventas e inventarios
Sistema para el control de ventas e inventarios
 
Programación Modular y Estructyrada
Programación Modular y EstructyradaProgramación Modular y Estructyrada
Programación Modular y Estructyrada
 
LinkedIn’s Culture of Transformation
LinkedIn’s Culture of TransformationLinkedIn’s Culture of Transformation
LinkedIn’s Culture of Transformation
 

Similar a Pilas colas

Similar a Pilas colas (20)

Curso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacionCurso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacion
 
Pilas colas listas
Pilas colas listasPilas colas listas
Pilas colas listas
 
Estructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesEstructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras Lineales
 
PilasyColas.ppt
PilasyColas.pptPilasyColas.ppt
PilasyColas.ppt
 
Estructura de datos pilas y colas
Estructura de datos pilas y colasEstructura de datos pilas y colas
Estructura de datos pilas y colas
 
I1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosI1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntos
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
secme-19001 (1) (1) (1).pdf
secme-19001 (1) (1) (1).pdfsecme-19001 (1) (1) (1).pdf
secme-19001 (1) (1) (1).pdf
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
08 pilas1 t2018
08 pilas1 t201808 pilas1 t2018
08 pilas1 t2018
 
Pilas ALAN MENDEZ.pdf
Pilas ALAN MENDEZ.pdfPilas ALAN MENDEZ.pdf
Pilas ALAN MENDEZ.pdf
 
Tipos De Datos Abstractos Colas
Tipos De Datos Abstractos ColasTipos De Datos Abstractos Colas
Tipos De Datos Abstractos Colas
 
7
77
7
 
PILAS
PILASPILAS
PILAS
 
Estructura de datos I Primera Parte
Estructura de datos I Primera ParteEstructura de datos I Primera Parte
Estructura de datos I Primera Parte
 

Último

Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacajeremiasnifla
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxJuanPablo452634
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILProblemSolved
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfalexquispenieto2
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralsantirangelcor
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrialGibranDiaz7
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfKEVINYOICIAQUINOSORI
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinosDayanaCarolinaAP
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfbcondort
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónXimenaFallaLecca1
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajasjuanprv
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptxCARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptxvalenciaespinozadavi1
 
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOL
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOLTERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOL
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOLdanilojaviersantiago
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOFritz Rebaza Latoche
 

Último (20)

Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpaca
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdfVALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdf
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integral
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrial
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdf
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinos
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcción
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajas
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptxCARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
 
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOL
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOLTERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOL
TERMODINAMICA YUNUS SEPTIMA EDICION, ESPAÑOL
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
 

Pilas colas

  • 1. 1 Programación Modular T E M A 5 Estructuras de Datos Avanzadas Contenido del Tema 5.1. Introducción 5.2. Pilas 5.3. Colas 5.4. Listas 5.5. Arboles Binarios Arboles Binarios de Búsqueda Programación Modular 2 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
  • 2. 2 Programación Modular 3 Introducción • Estudio de las Estructuras de Datos: Definición de la Estructura de Datos e identificación de su Conjunto de Operaciones Presentación de Aplicaciones Desarrollo de diversas Implementaciones Programación Modular 4 Pilas Definición • Pila: Grupo Ordenado, (de acuerdo al tiempo que llevan en la pila) de Elementos Homogéneos (todos del mismo tipo). • Acceso a la Pila: añadir y eliminar elementos, SÓLO a través de la CABEZA de la Pila • Estructura LIFO (Last Input First Output) Pila Cabeza Añadir Eliminar
  • 3. 3 Programación Modular 5 Pilas. Operaciones INTERFAZ CLASE CPila TIPOS TipoElemento ... // cualquier tipo de datos METODOS // Añade un elemento por la cabeza de la pila Apilar( E TipoElemento elem) // Saca un elemento por la cabeza de la Pila Desapilar() // Devuelve el elemento de la cabeza de la Pila TipoElemento Cima() ... Programación Modular 6 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
  • 4. 4 Programación Modular 7 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 8 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
  • 5. 5 Programación Modular 9 Pilas. Ejemplo2 Algoritmo Balanceo Tipos TipoElemento = C Variables TipoElemento c CPila pila B bien Inicio bien = VERDADERO Leer(c) MIENTRAS (bien Y (c!=CHR(13))) HACER SI c== ‘(’ ENTONCES pila.Apilar(c) SINO SI c == ‘)’ ENTONCES SI (!pila.EstáVacía()) ENTONCES pila.Desapilar() SINO bien = FALSO FINSI FINSI FINSI Leer(c) FINMIENTRAS SI bien Y pila.EstáVacía() ENTONCES Escribir(“cadena balanceada “) SINO Escribir(“cadena no balanceada”) FINSI pila.Destruir() Fin Programación Modular 10 Pilas. Ejemplo3 Algoritmo Lenguaje_L Tipos TipoElemento = $ Variables TipoElemento c1, c2 CPila pila B bien Inicio Leer(c1) MIENTRAS (c1 != ‘$’) HACER pila.Apilar(c1) Leer(c1) FINMIENTRAS Leer(c1) bien = VERDADERO MIENTRAS (bien AND (c1 <> CHR(13))) HACER SI pila.EstáVacía()ENTONCES bien= FALSO SINO c2 = pila.Cima() pila.Desapilar() SI (c1 != c2) ENTONCES bien = FALSE SINO Leer(c1) FINSI FINSI FINMIENTRAS SI (bien AND pila.EstáVacía())ENTONCES Escribir (“ Si pertenece”) SINO Escribir (“No pertenece”) FINSI pila Destruir() Fin
  • 6. 6 Programación Modular 11 Pilas. Aplicaciones • Aplicaciones complejas que se pueden solucionar con pilas: Expresiones Algebraicas Operadores: +, -, *, / Operandos: Letras mayúsculas • Notación Infija: • 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 Programación Modular 12 Pilas. Aplicaciones Notación Prefija • El operador binario esta situado justo antes de sus dos operandos +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 Postfija • El operador binario está situado justo después de sus dos operandos 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*
  • 7. 7 Programación Modular 13 Pilas. Aplicaciones • Ventaja: Usando expresiones prefijas y postfijas no son necesarias reglas de precedencia, ni uso de paréntesis. Las gramáticas que las generan son muy simples, y los algoritmos que las reconocen y evalúan muy fáciles • Ejemplo 4: Algoritmo que evalúa una expresión en notación Postfija 1)Usaremos una pila 2)La expresión postfija se almacenará en un array y será correcta 3)Los operandores serán: +, -, * y / 4)Los operandos serán letras mayúsculas (a cada una le podemos asignar un valor) Programación Modular 14 Pilas. Ejemplo4 Tipos C TipoArray[1..20] Z TipoElemento Algoritmo B Operando(C c) Inicio DEVOLVER (c=='+' O c=='*' O c=='/' O c=='-'); Fin Operando Algoritmo Operador(c:$):Z Inicio CASO c SEA 'A' : DEVOLVER(5) 'B' : DEVOLVER(7) 'C' : DEVOLVER(-1) 'D' : DEVOLVER(11) SINO DEVOLVER 0 FINCASO Fin Operando
  • 8. 8 Programación Modular 15 Pilas. Ejemplo4 Algoritmo Z Postfija(E TipoArray exp, E Z ultimo) Variables CPila pila Z i, op1, op2, result C c Inicio PARA i = 1 HASTA ultimo HACER c = exp[i] SI Operador(c) ENTONCES op2 = pila.Cima() pila.Desapilar() op1 = pila.Cima() pila.Desapilar() CASO c SEA ‘+’ : pila.Apilar(op1+op2) ‘-’ : pila.Apilar(op1-op2) ‘*’ : pila.Apilar(op1*op2) ‘/’ : pila.Apilar(op1/op2) FINCASO SINO pila.Apilar(Operando(c)) FINSI FINPARA result = pila.Cima() pila.Destruir() DEVOLVER result Fin Programación Modular 16 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]
  • 9. 9 Programación Modular 17 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 pasar como parámetro adicional a todas las operaciones sobre la pila 2) Extender el array, en pila[0] almacenaremos el índice del elemento que ocupa la cabeza actual Programación Modular 18 CONSTANTES Cabeza=0; MaxPila=100; TIPOS TipoElemento TDatos[Cabeza..MaxPila] Pilas. Implementación [0] [1] [2] [3] [99] [100] Cabeza 3 5 3 2 ....... Basura 2 3 5 Cabeza
  • 10. 10 Programación Modular 19 Pilas. Implementación • Inconveniente: Solo es posible implementar una pila de ordinales (no de cualquier otro tipo de datos) • 3) Solución: Registro = cabeza + array de datos 1 2 k MaxPila 5 13 8 .........k Cabeza Elementos Programación Modular 20 Pilas.Implementación IMPLEMENTACION CLASE CPila CONSTANTES MAXPILA = // Valor adecuado ATRIBUTOS Z cabeza TipoElemento datos[1..MAXPILA] MÉTODOS Crear () INICIO cabeza = 0 FIN Crear Destruir() INICIO cabeza=0 FIN Destruir
  • 11. 11 Programación Modular 21 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 22 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
  • 12. 12 Programación Modular 23 Pilas.Implementación // Sin precondición. Mete un elemento de la pila si no está llena Apilar(E TipoElemento elem;S B llena) INICIO llena = EstáLlena() SI NOT llena ENTONCES cabeza = cabeza + 1 datos[cabeza] = elem FINSI FIN Apilar Programación Modular 24 Pilas.Implementación // Sin precondición. Saca un elemento de la pila si no está vacía Desapilar(S B vacia) INICIO vacia = EstáVacia() SI NOT vacia ENTONCES cabeza = cabeza – 1 FINSI FIN Desapilar
  • 13. 13 Programación Modular 25 Pilas. Implementación // Sin precondición. Mira el 1er elemento de la pila si no está vacía TipoElemento Cima(S B vacia) VAR TipoElemento elem INICIO vacia = PilaVacia() SI NOT vacia ENTONCES elem=datos[cabeza] FINSI // Sin precondición. Devuelve el elemento de la cima de la // pila si no está vacía. Si está vacía devuelve un valor // basura devolver elem; FIN Cima Programación Modular 26 Pilas.Implementación 2) Con una Lista Enlazada de Punteros • Comienzo de una lista enlazada Cabeza de la Pila • Se inserta y se extrae por el inicio de la lista 10 8 cabeza 10 8
  • 14. 14 Programación Modular 27 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 28 Pilas.Implementación Apilar (E TipoElemento elem) VAR NodoPila *nuevonodo INICIO Asignar(nuevonodo) nuevonodo->dato = elem nuevonodo->sig = cabeza cabeza = nuevonodo FIN Apilar
  • 15. 15 Programación Modular 29 Pilas.Implementación Desapilar () VAR NodoPila *ptr INICIO ptr = cabeza cabeza = cabeza->sig Liberar(ptr) FIN Desapilar TipoElemento Cima () INICIO DEVOLVER cabeza->dato FIN Cima Suponiendo que la pila tiene al menos un elemento Programación Modular 30 Pilas. Implementación Desapilar (S B vacia) VAR NodoPila *ptr INICIO vacia = EstáVacia() SI NO vacia ENTONCES ptr = cabeza cabeza = cabeza->sig Liberar(ptr) FINSI FIN Desapilar Controlando la posibilidad de que la pila este vacía TipoElemento Cima (S B vacia) VAR TipoElemento elem INICIO vacia = EstáVacía() SI NO vacia ENTONCES elem = cabeza->dato FINSI DEVOLVER elem FIN Cima Los métodos de la misma clase se pueden llamar como: Método() o este.Metodo()
  • 16. 16 Programación Modular 31 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 32 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) Frente Final MeterSacar
  • 17. 17 Programación Modular 33 Colas. Interfaz INTERFAZ CLASE CCola TIPOS TipoElemento=//cualquier tipo de datos MÉTODOS Crear() // Crea una cola vacía B EstáVacía() //Devuelve VERDADERO si la cola no contiene //elementos. FALSO en caso contrario. Programación Modular 34 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
  • 18. 18 Programación Modular 35 Colas. Aplicaciones Ejemplo: Reconocimiento del lenguaje. L={W$W/W no contiene a $} B ALGORITMO Lenguaje_L(E C cad[] IMPORTA CCola 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 36 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
  • 19. 19 Programación Modular 37 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 38 Colas. Implementación • Ejemplo: 1 2 3 4 .......... 1 2 3 4 .......... Final=1 1 2 3 4 .......... Encolar(cola,”A”) A 1 2 3 4 .......... A BEncolar(cola,”B”) Final=2 Desencolar(cola) B 1 2 3 4 .......... B Final=1Desplazar
  • 20. 20 Programación Modular 39 Solución: • Utilizar un índice para el frente y otro para el final y permitir que ambos fluctúenpor el array • Ventaja: operación Desencolar 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 Programación Modular 40 Colas. Implementación • Ejemplo: 1 2 3 4 .......... 1 2 3 4 .......... Encolar(cola,”A”) A A BEncolar(cola,“B”) Frente=1 Final=1 Frente=1 Final=2 1 2 3 4 .......... A BEncolar(cola,“C”) C Frente=1 Final=3 1 2 3 4 .......... BDesencolar(cola) C Frente=2 Final=3
  • 21. 21 Programación Modular 41 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 Colas. Implementación Programación Modular 42 Colas. Implementación • Ejemplo: 1 2 3 45 6 B H 1 2 3 45 6 B H 1 2 3 45 6 H Frente=6 Final=6 Frente=5 Final=6 1 2 3 45 6 B HEncolar(cola,”G”) G Frente=5 Final=1 Frente=5 Final=6 Desencolar(cola)
  • 22. 22 Programación Modular 43 Colas. Implementación 1 2 3 45 6 B HEncolar(cola,”L”) M Frente=4 Final=3 ¿Cómo sabemos si la cola está vacía o llena? 1 2 3 45 6 B H Frente=4 Final=2 M A S L A S !!Cola llena!! 1 2 3 45 6 B 1 2 3 45 6 Frente=4 Final=3 Frente=3 Final=3 Desencolar(cola) !!Cola Vacía!! Programación Modular 44 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 2) Frente apunte a la casilla del array que precede a la del elemento frente de la cola
  • 23. 23 Programación Modular 45 Colas. Implementación Con la segunda solución es necesario que la posición a la que apunta frente esté Reservada 1 2 3 45 6 B H Frente=4 Final=6 1 2 3 45 6 B HEncolar(cola,”G”) G Frente=4 Final=1 res res Programación Modular 46 Colas. Implementación ¿Cómo saber si la cola está llena? Cola Llena: Frente == Final + 1 1 2 3 45 6 B H Frente=3 Final=2 M A S res
  • 24. 24 Programación Modular 47 Colas. Implementación ¿Cómo saber si la cola está vacía? Cola Vacía: Frente == Final • Crear la cola (inicializarla vacía): frente =Maxcola (índice del array que precede al elemento frente de la cola) y final=Maxcola Cola Vacía correcto (frente == final) 1 2 3 45 6 B 1 2 3 45 6 Frente=5 Final=5 Frente=4 Final=5 Desencolar(cola) res res Programación Modular 48 Colas. Implementación • Definiremos como atributos los índices frente y final y el número de elementos, junto con el array que contendrá los elementos de la cola 1 2 MaxCola 5 13 ................... frente final 2 Maxcola numelems 2
  • 25. 25 Programación Modular 49 Colas.Implementación IMPLEMENTACIÓN CLASE CCola CONSTANTES MAXCOLA = 100 ATRIBUTOS TipoElemento elementos[1..MAXCOLA] N NumElems N Principio N Final Programación Modular 50 Colas. Implementación MÉTODOS Crear () INICIO NumElems = 0 Principio = 1 Final = 0 FIN Crear Destruir() INICIO FIN Destruir
  • 26. 26 Programación Modular 51 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 52 Colas. Implementación Encolar (E TipoElemento Elem) INICIO SI NO EstáLLena() ENTONCES INC(NumElems) Final = (Final MOD MAXCOLA) + 1 elementos[Final] = elem FINSI Fin Encolar Desencolar () INICIO SI NOT EstáVacía() ENTONCES DEC(NumElems) Principio = (Principio MOD MAXCOLA) + 1 FINSI FIN Desencolar
  • 27. 27 Programación Modular 53 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 54 Colas. Implementación 2) Con listas enlazadas con Punteros • Usamos dos atributos de tipo puntero, frente y final, que apunten a los nodos que contienen los elementos frente y final • ¿Que sucedería si intercambiáramos las posiciones de frente y final en la lista enlazada? 10 8 4 Frente Final
  • 28. 28 Programación Modular 55 Colas. Implementación IMPLEMENTACIÓN CLASE CCola TIPOS NodoCola *TipoCola REGISTRO NodoCola TipoElemento valor TipoCola sig FINREGISTRO ATRIBUTOS TipoCola Principio TipoCola Final Programación Modular 56 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
  • 29. 29 Programación Modular 57 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 58 Colas. Implementación Encolar(E TipoElemento elem) VARIABLES TipoPuntero nuevonodo INICIO ASIGNAR(nuevonodo) nuevonodo->valor = elem nuevonodo->sig = NULO SI EstáVacia() ENTONCES Principio = nuevonodo EN OTRO CASO Final->sig = nuevonodo FINSI Final = nuevonodo FIN Encolar
  • 30. 30 Programación Modular 59 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 60 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
  • 31. 31 Programación Modular 61 Colas.Implementación • Con una lista enlazada circular es muy fácil implementar una Cola, sin tener que disponer de un registro con dos campos para el frente y para el final. c Frente Final Implementación