Igor Santos Grueiro. A diario hacemos colas para comer

Preview:

Citation preview

Programación IIColas

Igor Santos Grueiro

A diario hacemos

colas

para comer

para ir al cine

En nuestro ordenador también hay colas

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

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

Podemos hacer varias operaciones:

Crear una cola

Vaciar una cola

ObjetoObjeto

Comprobar si una cola está Vacía

ObjetoObjeto

NOSí

Obtener una copia del primer elemento

ObjetoObjeto Objeto

Insertar un elemento en la cola

ObjetoObjeto

Objeto

Se conoce como encolar o “put”

Recoger el primer elemento y eliminarlo de la cola

Se conoce como desencolar o “get”

Objeto Objeto

Construyamos una cola

Nos hace falta una estructura que enlace un elemento al siguiente

Object elementoNodo siguiente

Nodo

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;

}

}

}

Ahora la clase Cola

public class Cola{private NodoCola primero;

private NodoCola ultimo;

private int cont;

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

}// …

}

}

// … public vaciar(){

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

}// …

}

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

//…public boolean estaVacia(){

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

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

null

//…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

PrimeroCim

aCim

aÚltimo

//…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]; }

//…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]; }

PrimeroCim

aCim

aÚltimo

//…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]; }

PrimeroCim

aCim

aÚltimo

Devolvemos el objetodentro del nodo eliminado

//…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]; }

Ya comprendemos las colas

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.

Recommended