31
Programación II Colas Igor Santos Grueiro

Igor Santos Grueiro. A diario hacemos colas para comer

Embed Size (px)

Citation preview

Page 1: Igor Santos Grueiro. A diario hacemos colas para comer

Programación IIColas

Igor Santos Grueiro

Page 2: Igor Santos Grueiro. A diario hacemos colas para comer

A diario hacemos

colas

Page 3: Igor Santos Grueiro. A diario hacemos colas para comer

para comer

Page 4: Igor Santos Grueiro. A diario hacemos colas para comer

para ir al cine

Page 5: Igor Santos Grueiro. A diario hacemos colas para comer

En nuestro ordenador también hay colas

Page 6: Igor Santos Grueiro. A diario hacemos colas para comer

ObjetoObjeto

Una cola es una estructura formada por una secuencia de 0 a N elementos, en la que la extracción de elementos se hace en orden de inserción

Cola

Encolar Desencolar

Page 7: Igor Santos Grueiro. A diario hacemos colas para comer

En un cola se recoge el extremo inicial de la cola

Es un tipo de estructura FIFO (First Input First Output)

Un elemento nuevo se inserta por el extremo final de la cola

Page 8: Igor Santos Grueiro. A diario hacemos colas para comer

Podemos hacer varias operaciones:

Page 9: Igor Santos Grueiro. A diario hacemos colas para comer

Crear una cola

Page 10: Igor Santos Grueiro. A diario hacemos colas para comer

Vaciar una cola

ObjetoObjeto

Page 11: Igor Santos Grueiro. A diario hacemos colas para comer

Comprobar si una cola está Vacía

ObjetoObjeto

NOSí

Page 12: Igor Santos Grueiro. A diario hacemos colas para comer

Obtener una copia del primer elemento

ObjetoObjeto Objeto

Page 13: Igor Santos Grueiro. A diario hacemos colas para comer

Insertar un elemento en la cola

ObjetoObjeto

Objeto

Se conoce como encolar o “put”

Page 14: Igor Santos Grueiro. A diario hacemos colas para comer

Recoger el primer elemento y eliminarlo de la cola

Se conoce como desencolar o “get”

Objeto Objeto

Page 15: Igor Santos Grueiro. A diario hacemos colas para comer

Construyamos una cola

Page 16: Igor Santos Grueiro. A diario hacemos colas para comer

Nos hace falta una estructura que enlace un elemento al siguiente

Object elementoNodo siguiente

Nodo

Page 17: Igor Santos Grueiro. A diario hacemos colas para comer

public class NodoCola{private Object elemento;

private NodoCola siguiente;

public NodoCola(Object elemento, NodoCola siguiente){

this.elemento = elemento;this.siguiente = siguiente;

}

public NodoCola(Object elemento){this.elemento = elemento;this.siguiente = null;

}public Object getElemento(){

return elemento;}public NodoCola getSiguiente(){

return siguiente;}public void insertarSig(Object x) {

NodoCola nuevoNodo = new NodoCola(x, this.siguiente);this.siguiente = nuevoNodo;

}

}

}

Page 18: Igor Santos Grueiro. A diario hacemos colas para comer

Ahora la clase Cola

Page 19: Igor Santos Grueiro. A diario hacemos colas para comer

public class Cola{private NodoCola primero;

private NodoCola ultimo;

private int cont;

public Cola(){this.primero = null;this.ultimo = null;this.cont = 0;

}// …

}

}

Page 20: Igor Santos Grueiro. A diario hacemos colas para comer

// … public vaciar(){

this.primero = null;this.ultimo = null;this.cont = 0;

}// …

}

Para vaciar se ponen a null el primero y el último

Page 21: Igor Santos Grueiro. A diario hacemos colas para comer

//…public boolean estaVacia(){

return (this.primero == null); }//…

Para comprobar si está vacía miramos si el primero es

null

Page 22: Igor Santos Grueiro. A diario hacemos colas para comer

//…public void put(Object x){

if (primero == null){this.primero = new NodoCola(x);this.ultimo = primero;

}else{this.ultimo.insertarSiguiente(x);this.ultimo = this.ultimo.getSiguiente();

} this.cont++;}//…

Para insertar un elemento se añade un elemento como siguiente del

último nodo de la cola

Page 23: Igor Santos Grueiro. A diario hacemos colas para comer

PrimeroCim

aCim

aÚltimo

Page 24: Igor Santos Grueiro. A diario hacemos colas para comer

//…public Object frente(){

if (this.primero !=null)return this.primero.getElemento();

elsereturn null;

}//…

Para devolver el elemento al frente se devuelvo el

primero

public Object cima(){ return v[cont-1]; }

Page 25: Igor Santos Grueiro. A diario hacemos colas para comer

//…public void borrar(){

if (this.primero !=null){this.primero = this.primero.getSiguiente();this.cont--;

}}//…

Para borrar el elemento al frente se pone el primero al valor siguiente del primero

previo

public Object cima(){ return v[cont-1]; }

Page 26: Igor Santos Grueiro. A diario hacemos colas para comer

PrimeroCim

aCim

aÚltimo

Page 27: Igor Santos Grueiro. A diario hacemos colas para comer

//…public Object get(){

if (this.primero == null)return null;

else {this.cont--;NodoCola nodoTmp = this.primero;this.primero = this.primero.getSiguiente();return nodoTmp.getElemento();

}}//…

Para desencolar el elemento al frente se recupera y se borra el

elemento primero

public Object cima(){ return v[cont-1]; }

Page 28: Igor Santos Grueiro. A diario hacemos colas para comer

PrimeroCim

aCim

aÚltimo

Devolvemos el objetodentro del nodo eliminado

Page 29: Igor Santos Grueiro. A diario hacemos colas para comer

//…public int tamanyo(){

return this.cont;}//…

También, podemos recuperar el número de elementos

insertados en la cola

public Object cima(){ return v[cont-1]; }

Page 30: Igor Santos Grueiro. A diario hacemos colas para comer

Ya comprendemos las colas

Page 31: Igor Santos Grueiro. A diario hacemos colas para comer

Ejercicio palíndromos

Diseñar un programa que determine si una frase introducida por teclado es o no palíndroma.

Una frase es palíndroma si la secuencia de caracteres de izquierda a derecha en la frase es la misma que de derecha a izquierda. En esta comprobación no se tendrá en cuenta los caracteres blancos que separan las palabras de la frase, ni se diferenciaran las mayúsculas de las minúsculas.

El programa deberá hacer uso en este programa de una Pila y de una Cola para verificar que la frase es o no palíndroma.