Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EDA Tema 8 Gmolto PDF
EDA Tema 8 Gmolto PDF
Índice general:
Tema 8- Implementación de Pila, 1. Representación Eficaz de una EDA Lineal
Cola y Lista con Punto de Interés 2. Implementación de Pila: La Clase ArrayPila
3. Implementación de Cola: La Clase ArrayCola
4. I l
Implementación
ió d
de Li
Lista Con
C Punto
P de
d Interés:
I é LaL Clase
Cl
LEGListaConPI
Germán Moltó
Escuela Técnica Superior de Ingeniería Informática
Uni ersidad Politécnica de Valencia
Universidad
1 2
3 4
Claves para implementar una EDA Implementación de Pila: La Clase
lineal ArrayPila
1. Inicialmente, representamos los datos de la EDA sobre un array de Una Pila es una colección homogénea de public interface Pila<E> {
CAPACIDAD POR DEFECTO componentes.
CAPACIDAD_POR_DEFECTO datos que sólo se puede gestionar void apilar(E x);
E desapilar();
2. Si la EDA requiere alguna forma de acceso especial (por ejemplo accediendo secuencialmente al dato que E tope();
FIFO o LIFO),
LIFO) definir nuevos atributos que los representen para ocupa el Punto de Interés,
Interés siguiendo un b l
boolean esVacia();
V i ()
implementar el acceso eficazmente. criterio LIFO (Last In First Out), esto es, }
3. Analizar el coste de cada una de las operaciones de la interfaz accediendo al dato que ocupa el tope de
implementada. la pila, es decir, el último que se insertó.
Si alguna operación requiere desplazamiento de datos en la y
• La clase ArrayPila implementa
p el interfaz Pila.
representación
t ió interna,
i t se descarta
d t la
l representación
t ió como un
• Atributos principales:
array.
• Un array para almacenar los elementos de la Pila.
4
4. Ensayar una implementación del interfaz con una representación • Una
U capacidad
id d iinicial
i i l para ell vector.
t
basada en Lista Enlazada. • Un marcador al tope de la pila (la posición en el vector del último
elemento insertado), inicialmente valdrá -1.
5 6
A
public ArrayPila () {
elArray=y (E[])
( []) new Object[CAPACIDAD
j [ _POR_DEFECTO]; ]
• Punto de vista de la implementación: tope = -1;
}
A B C D elArray
lA public void apilar(E x) {
if ( tope + 1 == elArray.length) duplicarArray();
tope++; elArray[tope] = x; ¿Qué ocurre si se trata de apilar un nuevo
tope } elemento
l t y elArray
lA está
tá completo?
l t ?
7 8
Clase ArrayPila (2/3) Clase ArrayPila (3/3)
public E desapilar() {
public String toString() {
E elUltimo = elArray[tope]; ¿Qué ocurre si se invoca a String res = "";
tope--; desapilar y elArray está vacío?
return elUltimo; for (int i = tope; i >= 0; i--) res += elArray[i] +"\n";
} return res;
}
public E tope() { @SuppressWarnings( unchecked )
@SuppressWarnings("unchecked")
return elArray[tope]; private void duplicarArray() {
} E nuevoArray[]
y[] = ((E[])
[]) new Object[elArray.length*2];
j [ y g ]
for ( int i = 0; i <= tope; i++ ) nuevoArray[i] = elArray[i];
public boolean esVacia() { elArray = nuevoArray;
return ( tope == -11 ); }}
}
• El método toString() muestra los elementos en orden inverso al que fueron
insertados
d en lal Pila,
P l es decir,
d ell orden
d en ell que serían
í desapilados.
d l d
9 10
23 24
Implementaciones Alternativas de Pila y
Cola La clase ArrayDequePila
Es posible implementar los modelos de Pila y de Cola aprovechando la public class ArrayDequePila<E> extends ArrayDeque<E> implements
funcionalidad ya existente en Java.
Java Pila<E>
En Java Platform SE 6 aparece la interfaz Deque (double ended queue) que {
permite:
public
bli ArrayDequePila()
A D Pil () { super();}
() }
Inserción y borrado de elementos tanto al principio como al final de la
estructura.
NO permite acceso indexado a la estructura (solo en ambos extremos).
extremos) public void apilar(E x) { push(x);}
Permite utilizar la estructura para acceso FIFO (como una Cola) y para public E desapilar() { return pop(); }
acceso LIFO (como una Pila). public E tope() { return peek(); }
La clase ArrayDeque proporciona la implementación de la interfaz, utilizando public boolean esVacia() { return (size() == 0); }
un array como mecanismo de almacenamiento. }
Operaciones
O i con coste constante amortizado.
i d
25 26
La Clase ArrayDequeCola
public class ArrayDequeCola<E> extends ArrayDeque<E> implements
Cola<E>
{
public ArrayDequeCola() { super();}
public void encolar(E x) {addLast(x); }
public E desencolar() { return pollFirst(); }
public E primero() { return peekFirst(); }
public boolean esVacia() {
return (size() == 0);
}
}
27