You are on page 1of 50

CAPÍTULO II:

Estructura de Datos Lineales: LA PILA

Entrada 1. Pila
1.1 Operaciones sobre Pila
Salida 1.2 Implementación de Pilas

PREPARADO POR: ING. JACQUELINE DE CHING


OBJETIVOS ESPECÍFICOS
• Definir concepto de Pila
• Resolver problemas de Pilas utilizando algoritmos

Ing. Jacqueline de Ching


ESTRUCTURAS DE DATOS

Almacenamiento
Contiguo

Lineales
Estructuras
de Datos Almacenamiento No
Contiguo
No lineales

Ing. Jacqueline de Ching


LA PILA (Definición)
• Estructura de datos lineal donde los elementos pueden ser
añadidos o removidos solo por un extremo permitiendo
almacenar y recuperar datos.
• Trabajan con filosofía LIFO (Last In- First Out, último en entrar,
primero en salir ).
Ejemplos:
1. Pila de platos
2. Pila de discos
3. Pila de llamadas a funciones
4. Pila de recursión
5. Pila de resultados parciales de formulas aritméticas

Ing. Jacqueline de Ching


LA PILA (Conceptos)

• Tiene un punto de acceso, la cabeza (inicio) y el final (tope).


• Cuando se agrega un elemento, se coloca al final de la pila,
cuando se quita, también se elimina del final de la misma.
• Es un error tratar de quitar un elemento de una pila vacía.

Ing. Jacqueline de Ching


REPRESENTACIÓN DE PILAS
• Usando arreglos(estática): Define un arreglo de una
dimensión (vector) donde se almacenan los elementos.

0 1 2 3 4 5

TOPE: Apunta hacia el elemento que se encuentra en el


extremo de la pila. (inicialmente es -1).

• Usando Listas Enlazadas(dinámica)

Ing. Jacqueline de Ching


APLICACIONES DE LAS PILAS
• Para modelar 'pilas reales' en el mundo de las computadoras:
Recursión, Llamadas a procedimientos, etc.
• Verificar palíndromos
• Verificar si los paréntesis de una expresión están balanceados.
Push al encontrar un "(" y pop al encontrar un ")".
• Conversión de expresiones matemáticas (infija, prefija,
posfija).
• Evaluación de expresiones en notación posfija.
• Recorrido de grafos, búsqueda en profundidad.

Ing. Jacqueline de Ching


LA PILA (OPERACIONES BÁSICAS)
 CREAR
 METER (PUSH)
 SACAR (POP)
Pilas: Operaciones: CREAR
Crear una pila nueva.
Entrada: número de elementos del arreglo
Salida: una pila vacía (de tamaño 0).
struct tipopila {
tipodedato vector[maximo];
int tope;
};
tipopila pila;

Ing. Jacqueline de Ching


OPERACIONES BÁSICAS CON PILAS
Para el manejo de los
METER
datos se cuenta con dos
SACAR
operaciones básicas:
• METER (push), agrega
un elemento a la pila en
el extremo llamado
tope.
• SACAR (pop), retira el
último elemento
apilado, es decir el que
esta en el extremo
llamado tope.

Ing. Jacqueline de Ching


OPERACIONES BÁSICAS CON PILAS
meter 1 meter 2 meter 3 tope
O tope
3
1 2
1 2
1
Sacar 3

meter 4
tope
3 4
tope
2
2
1
1
Ing. Jacqueline de Ching
Pilas: Operaciones: METER
Precondición: pila no llena
Entrada: pila, fin, dato
Salida: pila modificada
Void MeterPila (tipopila pila, tipodedato dato1)
{
si no llena
{ pila.tope pila.tope + 1;
pila.vector [pila.tope] dato1}
si no escribir “ lista llena ”
}

Ing. Jacqueline de Ching


Pilas: Operaciones: SACAR
Precondición: pila no vacía
Entrada: pila
Salida: pila modificada, dato
tipodedato SacarPila (tipopila pila){
tipodedato dato1;
Si no vacía
{ dato1= pila.vector [pila.tope];
pila.tope = pila.tope-1;
return (dato1);}
si no escribir ( ‘pila Vacía’ )
}
Ing. Jacqueline de Ching
LA PILA (otras operaciones básicas)

 PILA VACIA: Sirve para determinar si una pila


está vacía o no.
 PILA LLENA: Determina si la pila está llena.
Pilas: operaciones: VACÍA
Entrada: pila
Salida: un boolean = a true si es vacía.

Boolean vacia (tipopila pila){


vacia = pila.tope == -1;
return vacia;
}

Ing. Jacqueline de Ching


Pilas: operaciones: LLENA
Entrada: pila, fin
Salida: true si está llena.

Boolean llena (tipopila pila){


llena = pila.tope == maximo;
Return llena;
}

Ing. Jacqueline de Ching


Ejemplo
Eliminar
Insertar Insertar Insertar
elemento
Inicio: A: B: C:

B B B

A A A
A

Tope -1 Tope Tope Tope


Tope

Ing. Jacqueline de Ching


Ejemplo de Pila con estructura estática
Es una pila implementada como un arreglo
0 1 2 3 4 max

11 22 33 44

inicio tope

Ing. Jacqueline de Ching


Pilas: Casos posibles:
llena

11 22 33 44 55 66 77 88 99 00

inicio tope

11 22 33 44 55

con algunos elementos


inicio tope

Ing. Jacqueline de Ching


Pilas: Casos posibles:

pila vacía
tope inicio

Ing. Jacqueline de Ching


Aplicaciones de Pilas
EXPRESIONES ARITMETICAS:
Una expresión aritmética contiene constantes,
variables y operaciones con distintos niveles de
precedencia.

OPERACIONES :
^ potencia
*/ multiplicación, división
+,- suma, resta

Ing. Jacqueline de Ching


NOTACIONES
NOTACION INFIJA:
Los operadores aparecen en medio de los operandos.
A + B, A – 1, E/F, A * C , A ^ B , A + B + C, A+B-C

NOTACION PREFIJA:
El operador aparece antes de los operandos.
+ AB, - A1, /EF, *AC, ^AB, +AB+C, +AB-C

NOTACION POSTFIJA:
El operador aparece al final de los operandos.
AB+, A1-, EF/, AC*, AB^, AB+C+, AB+C-

Ing. Jacqueline de Ching


PASOS PARA EVALUAR UNA
EXPRESION:

1. CONVERTIR A POSTFIJO: convertir la expresión en


notación infijo a notación postfijo

2. EVALUAR LA EXPRESION POSTFIJA: usar una pila


para mantener los resultados intermedios cuando se
evalúa la expresión en notación posfijo.

Ing. Jacqueline de Ching


REGLAS PARA CONVERTIR
EXPRESION INFIJA A POSTFIJA
Se crea un string resultado donde se almacena la expresión en postfijo.

1. Los operandos se agregan directamente al resultado


2. Un paréntesis izquierdo se mete a la pila y tiene prioridad o
precedencia cero (0).
3. Un paréntesis derecho saca los elementos de la pila y los agrega al
resultado hasta sacar un paréntesis izquierdo.
4. Los operadores se insertan en la pila si:
a) La pila esta vacía
b) El operador en el tope de la pila tiene menor precedencia.
c) Si el operador en el tope tiene mayor o igual precedencia se
saca y agrega al resultado (repetir esta operación hasta encontrar
un operador con menor precedencia o la pila este vacía).
5. Cuando se termina de procesar la cadena que contiene la expresión
infijo se vacía la pila pasando los elementos al resultado.
Ing. Jacqueline de Ching
Ejemplos
• Convertir las siguientes expresiones infijas a posfijo
A +B*C-D
A * ((B-C) / 2))
((X-Z)*(Y+W))/X+Y

Ing. Jacqueline de Ching


REGLAS PARA EVALUAR UNA
EXPRESION POSTFIJA
Recorrer la expresion de izquierda a derecha
1. Si es un operando
a. almacenar el valor en la pila de valores
2. Si es un operador:
a. Obtener dos operandos de la pila de valores
b. Aplicar el operador
c. Almacenar el resultado en la pila de valores

Al finalizar el recorrido, el resultado estará en la pila de valores

Ing. Jacqueline de Ching


Aplicaciones de Pilas
Funciones Recursivas
• Las pilas pueden ser usadas para implementar la
recursión en programas.
• Una función o procedimiento recursivo es aquel que se
llama a si mismo.
• Ejemplos:
– Factorial
– Números de Fibonacci
– Torres de Hanoi
– Algoritmos de Ordenamiento de datos
– Etc.

Ing. Jacqueline de Ching


Aplicaciones de Pilas
Recursion
// Funcion factorial
int factorial(int n) {
if (n<=1) return 1;
else return n*factorial(n-1);
}

// Funcion fibonacci
int fib(int n) {
if (n==1) return 0;
else if (n==2) return 1;
else return fib(n-1)+fib(n-2);
}

Ing. Jacqueline de Ching


Aplicaciones de Pilas
Control de secuencia de programas.

• Las pilas son requeridas para implementar el


control de flujo de ejecución de un programa
con subprogramas (funciones, procedimientos
o métodos).
– Subprogramas recursivos o no recursivos
– Existen llamadas a ejecución de subprogramas.
– Un subprograma se ejecuta completamente antes
de retornar al punto donde fue llamado.

Ing. Jacqueline de Ching


CAPÍTULO III:
ESTRUCTURAS DE DATOS LINEALES: LA COLA

1. Cola
Entra Salida 1.1 Operaciones sobre Cola
da 1.2 Implementación de Cola

PREPARADO POR: ING. JACQUELINE DE CHING


OBJETIVOS ESPECÍFICOS

• Definir concepto de Cola


• Resolver problemas de Cola utilizando algoritmos
COLAS (Definición)
• Es una lista lineal de elementos en la que las
operaciones de insertar y eliminar se realizan en
diferentes extremos de la cola.
• Trabajan con filosofía FIFO ( First In - First out), el
primer elemento en entrar es el primer elemento en
salir.
Ejemplos:
• Cola de automóviles esperando servicio en una
gasolinera
• Cola de clientes en una ventanilla del banco para
pagar un servicio
• Cola de programas en espera de ser ejecutados por
una computadora.
Ing. Jacqueline de Ching
APLICACIONES DE LAS COLAS
• Operaciones en redes de computadoras
– Trabajos enviados a una impresora
– Solicitudes a un servidor.
• Clientes solicitando ser atendidos por una
telefonista
• Simulaciones de cualquier situación real en la
que se presente una “organización” tipo cola

Ing. Jacqueline de Ching


Implementación de Colas
• Arreglo(memoria estática)
Final

Frente B C D E F

0 1 2 3 4

• Listas ligadas(memoria dinámica)


Final

B C D E F

Frente

Ing. Jacqueline de Ching


TIPOS DE COLAS:
• Cola simple: Estructura lineal donde los elementos
salen en el mismo orden en que llegan.

• Cola circular: Representación lógica de una cola


simple en un arreglo.

Ing. Jacqueline de Ching


LA COLA (Conceptos)

• Tiene dos puntos de acceso, la cabeza (inicio) y el


final (fin).
• Cuando se agrega un elemento, se coloca al final de la
cola, cuando se quita, se elimina del inicio de la
misma.
• Es un error tratar de quitar un elemento de una cola
vacía.

Ing. Jacqueline de Ching


COLAS SIMPLES (operaciones básicas)
Insertar: Almacena al final de la cola el elemento que
se recibe como paramétro.
Eliminar: Saca de la cola el elemento que se encuentra
al frente.
Vacía: Regresa un valor booleano indicando si la cola
tiene o no elementos (true si la cola esta vacia, false
si la cola tiene al menos un elemento).
Llena: Regresa un valor booleano indicando si la cola
tiene espacio disponible para insertar nuevos
elementos ( true si esta llena y false si existen
espacios disponibles).
Ing. Jacqueline de Ching
• Cuando la cola esta vacía las variables frente y final son
nulos y no es posible remover elementos.

• Cuando la cola esta llena ( frente = n-1 y final = n-1) no


es posible insertar elementos nuevos a la cola.

• Recuperación de espacio: Cuando no hay espacios libres


al final del arreglo los elementos pueden ser
desplazados para desocupar posiciones en un extremo
del arreglo o se puede manejar una estructura circular.

Ing. Jacqueline de Ching


Estado de la cola:
Operaciones:
Inicio: Cola Vacía

1.- Insertar A A

2.- Insertar B A B

3.- Insertar C A B C

4.- Remover Elemento B C

5.- Insertar D B C D

6.- Remover Elemento C D

Ing. Jacqueline de Ching


Cola: Operaciones: CREAR
Agrega un elemento a la cola
Entrada: número de elementos del arreglo
Salida: una colavacía (de tamaño 0).
struct tipocola {
tipodedato vector[maximo];
int frente, final;
};
tipopila cola;

Ing. Jacqueline de Ching


Cola: Operaciones: INSERTAR
Agrega un elemento al final de la cola
Precondición: Cola no llena
Entrada: Cola, dato
Salida: cola modificada
Void InsertarCola (tipocola cola, tipodedato dato1)
{ si no llena
{ cola.final cola.final + 1;
cola.vector [cola.final] dato1;
si (cola.frente == -1)
cola.frente = cola.frente + 1;}
de otro modo escribir “ lista llena ”
}

Ing. Jacqueline de Ching


Cola: Operaciones: ELIMINAR
Quitar y devolver el primer elemento de la cola
Precondición: cola no vacía
Entrada: cola
Salida: cola modificada, dato
tipodedato EliminarCola (tipocola cola)
{ tipodedato dato1;
Si no vacía
{dato1 = cola.vector [cola.frente];
si (cola.frente == cola.final)
{ cola.frente = -1;
cola.final = -1;}
de otro modo
{ cola.frente = cola.frente + 1;
return dato1;}
de otro modo escribir ( ‘Cola Vacía’ )
}
Ing. Jacqueline de Ching
Cola: Operaciones: VACÍA
Sirve para determinar si una cola está vacía o no.
Entrada: cola
Salida: un boolean = a true si es vacía.

Boolean vacia (tipocola cola){


vacia = cola.frente == -1;
Return vacia;
}

Ing. Jacqueline de Ching


Cola: Casos posibles:

Cola vacía
final frente

Ing. Jacqueline de Ching


Cola: Operaciones: LLENA
Determina si la cola está llena.
Entrada: cola, fin
Salida: true si está llena.

Boolean llena (tipocola cola){


llena = cola.final == máximo-1;
Return llena;
}

Ing. Jacqueline de Ching


Filas: Casos posibles:
llena

11 22 33 44 55 66 77 88 99 00

frente final

11 22 33 44 55

con algunos elementos


frente final
Ing. Jacqueline de Ching
Ejemplo: Suponer que usamos un arreglo de 5
posiciones. Usando la representación de cola simple:

Frente A B C

Final

Ing. Jacqueline de Ching


Insertar elemento D:
Frente Final

A B C D

Insertar elemento E:
Frente Final

A B C D E

Ing. Jacqueline de Ching


Insertar elemento F:

Frente Final

A B C D E

Error: Cola llena!!!!

Ing. Jacqueline de Ching


Frente Final

Cola
Cola Circular inicial B C D

Es una representación Frente Final


lógica de la cola en un Eliminar
arreglo. C D
El frente y final son
movibles. Frente Final

Cuando el frente o Insertar E

final llegan al C D E

extremo se regresan a
Final Frente
la primera posición
Insertar F
del arreglo.
F C D E

Ing. Jacqueline de Ching

You might also like