Pilas y Colas

23
PILAS Y COLAS Daniel Jose Ruiz Gutierrez

description

Pilas y Colas

Transcript of Pilas y Colas

PILAS Y COLASDaniel Jose Ruiz Gutierrez

PILAS

Las pilas son estructuras de datos que tienes dos operaciones básicas: push (para insertar un elemento) y pop (para extraer un elemento). Su característica fundamental es que al extraer se obtiene siempre el último elemento que acaba de insertarse. Por esta razón también se conocen como estructuras de datos LIFO (del inglés Last In First Out).

OPERACIONES CON PILAS

PUSH (inserter): Agrega un elementos a la pila en el extremo llamado tope.

POP (remover): Remueve el elemento de la pila que se encuentra en el extremo llamado tope.

VACIA: Indica si la pila contiene o no contiene elementos.

LLENA: Indica si es posible o no agregar nuevos elementos a la pila.

REPRESENTACIÓN DE PILAS

Usando arreglos: Define un arreglo de una dimensión (vector) donde se almacenan los elementos.

TOPE: Apunta hacia el elemento que se encuentra en el extremo de la pila. (inicialmente es -1).

0 1 2 3 4 5

Inicio:

Insertar

A:

Tope -1

Insertar

B:

Insertar

C:

Eliminar

elemento

Tope

A A

B

Tope

A

B

Tope

C

A

B

Tope

Ejemplo

IMPLEMENTACIÓN USANDO UN VECTOR

public class Stack {

private Vector items;

public Stack() {

items = new Vector(10);

}

public Object push(Object item){

items.addElement(item);

return item;

}

public synchronized Object pop(){

int len = items.size();

Object obj = null;

if (len == 0) throw new EmptryStackException();

obj = items.elementAt(len-1);

items.removeElementAt(len –1);

return obj;

}

public boolean isEmpty() {

if (items.size == 0) return true;

else return false;

}

}

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

Aplicaciones de Pilas

NOTACION INFIJA:

Los operadores aparecen en medio de los operando.

A + B, A – 1, E/F, A * C , A ^ B , A + B + C, A+B-C

NOTACION PREFIJA:

El operador aparece antes de los operando.

+ AB, - A1, /EF, *AC, ^AB, +AB+C, +AB-C

NOTACION POSTFIJA:

El operador aparece al final de los operando.

AB+, A1-, EF/, AC*, AB^, AB+C+, AB+C-

NOTACIONES

PASOS PARA EVALUAR UNA EXPRESION:

CONVERTIR A POSTFIJO: convertir la expresión en notación infijo a notación postfijo

EVALUAR LA EXPRESION POSTFIJA: usar una pila para mantener los resultados intermedios cuando se evalúa la expresión en notación posfijo.

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 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.

EJEMPLOS

Convertir las siguientes expresiones infijas a posfijo

A +B*C-D

A * ((B-C) / 2))

((X-Z)*(Y+W))/X+Y

REGLAS PARA EVALUAR UNA EXPRESION POSTFIJA

Recorrer la expresion de izquierda a derecha

1. Si es un operando

1. almacenar el valor en la pila de valores

2. Si es un operador:

1. Obtener dos operandos de la pila de valores

2. Aplicar el operador

3. Almacenar el resultado en la pila de valores

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

COLAS

Definition. 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 gasolineraCola de clientes en una ventanilla del banco para pagar un servicioCola de programas en espera de ser ejecutados por una computadora.

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.

Cola de Prioridades: Estructura lineal en la cual los elementos se insertan en cualquier posición de la cola y se remueven solamente por el frente.

Cola Doble (Bicola): Estructura lineal en la que los elementos se pueden añadir o quitar por cualquier extremo de la cola (cola bidireccional).

OPERACIONES BÁSICAS EN COLAS SIMPLES

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

IMPLEMENTACIÓN DE COLAS

Arreglo con frente fijo.

con frente movible.

circular.

Listas ligadas

Las colas pueden ser representadas en arreglos de una dimensión (vector) manteniendo dos variables que indiquen el FRENTE y FINAL de los elementos de la cola.

A F S D Z

Frente Final

0 1 2 3 4 5

Representación usando arreglos

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 = 0 y final = n-1) no es posible insertar elementos nuevos a la cola.

Cuando se remueven elementos el frente puede incrementarse para apuntar al siguiente elemento de la cola (implementacion con frente movil) o los elementos en la cola pueden desplazarse una posicion adelante (implementación con frente fijo)

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.

Ejemplo: Suponer que usamos un arreglo de 5 posiciones. Usando la representación de frente fijo y frente movible.

A B CFrente

Final

Al remover un elemento:

B C

Frente Final

B C

Frente Final

Frente fijo Frente movible

Insertar elemento D:

B C D

Frente Final

B C

Frente Final

B C D

B C

Frente Final

Frente Final

Insertar elemento E:

B C D E

Frente Final

Insertar elemento F:

B C D E F

Frente Final

Insertar elemento G: Error: Cola llena!!!!

B C D E

Frente Final

B C D E F

Frente Final

COLA CIRCULAR

Es una representación lógica de la cola en un arreglo.

El frente y final son movibles.

Cuando el frente o final llegan al extremo se regresan a la primera posición del arreglo.

C D E

Frente Final

F C D E

FrenteFinal

C D

Frente Final

B C D

Frente Final

Remover

Insertar E

Insertar F

Cola inicial

Representación de colas: Usando memoria estática: arreglos con tamaño fijo y frente fijo o movible o represntación circular.

Usando memoria dinámica: Listas ligadas.

B C D E FFrente

Final

0 1 2 3 4

B C D

Frente

Final

E F