Está en la página 1de 20

cdk@it.uc3m.

es
Pilas
Carlos Delgado Kloos
Dep. Ingeniera Telemtica
Univ. Carlos III de Madrid
Java: Pilas / 1
cdk@it.uc3m.es
Ejemplo
Java: Pilas / 2
cdk@it.uc3m.es
Ejemplo
Java: Pilas / 3
cdk@it.uc3m.es
Ejemplo
Java: Pilas / 4
cdk@it.uc3m.es
Caractersticas
Estructura lineal
Acceso de insercin y eliminacin
por un solo extremo
Java: Pilas / 5
cdk@it.uc3m.es
Mtodos principales
Meter por un extremo: push(x)
Sacar por el mismo extremo: pop()
Java: Pilas / 6
cdk@it.uc3m.es
Ejemplo:
Comprobar parntesis
Bien:

()
(()(()))
Mal:
)(
(()
())
Java: Pilas / 7
Reglas:
Bsico:
Secuenciacin: ()()
Anidamiento: (())
cdk@it.uc3m.es
Ejemplo:
Comprobar parntesis
Reglas:
Cada vez que nos encontremos
lo metemos en la pila.
Cada vez que nos encontremos
sacamos el superior de la pila.
La cadena de parntesis es correcta,
si la pila est vaca
al acabar de recorrer toda la cadena.
Java: Pilas / 8
(
)
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 9
(()(()())())
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 10
(()(()())())
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 11
(()(()())())
(
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 12
(()(()())())
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 13
(()(()())())
(
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 14
(()(()())())
(
(
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 15
(()(()())())
(
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 16
(()(()())())
(
(
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 17
(()(()())())
(
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 18
(()(()())())
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 19
(()(()())())
(
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 20
(()(()())())
(
cdk@it.uc3m.es
Ejemplo:
comprobar (()(()())())
Java: Pilas / 21
(()(()())())
Correcto: Hemos recorrido toda la
cadena y la pila est vaca
cdk@it.uc3m.es
Ejemplo:
comprobar ([]{()<>}())
Java: Pilas / 22
([]{()<>}())
Correcto: Hemos recorrido toda la
cadena y la pila est vaca
Ejemplo: HTML
<b><i>hola</b></i>
([)]
Correcto con HTML 1.0-4.0
Incorrecto con XHTML
<b><i>hola</i></b>
([])
Correcto con HTML 1.0-4.0
Correcto con XHTML
cdk@it.uc3m.es Java: Pilas / 23
cdk@it.uc3m.es
Interfaz para pilas
public interface Stack {
public int size();
public boolean isEmpty();
public void push(Object o);
public Object pop()
throws StackEmptyException;
public Object top()
throws StackEmptyException;
}
Java: Pilas / 24
cdk@it.uc3m.es
Un interfaz y
varias implementaciones
Java: Pilas / 25
ArrayStack
Stack
LinkedStack
cdk@it.uc3m.es
Implementacin
basada en arrays
Java: Pilas / 26
S
0 1 2 N-1 3 4 5
1
top
2
top
3
top
4
top
5
top top
cdk@it.uc3m.es
Implementacin
basada en arrays
public class ArrayStack implements Stack {
public static final int CAP=1000;
private int capacity;
private Object S[];
private int top=-1;
public ArrayStack(){this(CAP);}
public ArrayStack(int cap){
capacity=cap;
S=new Object[capacity];}
Java: Pilas / 27
cdk@it.uc3m.es
Implementacin
basada en arrays
public int size()
{return (top+1);}
public boolean isEmpty()
{return (top<0);}
public Object top()
throws StackEmptyException {
if (isEmpty())
throw new StackEmptyException("vacio");
return S[top];}
Java: Pilas / 28
cdk@it.uc3m.es
Implementacin
basada en arrays
public void push(Object o)
throws StackFullException {
if (size()==capacity)
throw new StackFullException("lleno");
S[++top]=o;}
public Object pop()
throws StackEmptyException {
Object el;
if (isEmpty())
throw new StackEmptyException("vacio");
el=S[top]; S[top--]=null; return el;}
}
Java: Pilas / 29
cdk@it.uc3m.es
Implementacin basada
en listas encadenadas
Java: Pilas / 30
Madrid Miami Mnich
top
cdk@it.uc3m.es
Implementacin
basada en listas
class Node {
private Object elem;
private Node next;
public Node(Object e, Node n) {
elem=e; next=n;}
void setElem(Object e) {elem=e;}
void setNext(Node n) {next=n;}
Object getElem() {return elem;}
Node getNext() {return next;}
}
Java: Pilas / 31
cdk@it.uc3m.es
Implementacin
basada en listas
public class LinkedStack implements Stack {
private Node top;
private int size;
public LinkedStack() {top=null; size=0;}
public int size() {return size;}
public boolean isEmpty() {
return(top==null);}
Java: Pilas / 32
cdk@it.uc3m.es
Insercin (push)
Java: Pilas / 33
Mosc
Madrid Miami Mnich
top
cdk@it.uc3m.es
Implementacin
basada en listas
public void push(Object e) {
Node n=new Node(e, top);
top=n;
size++;
}
Java: Pilas / 34
cdk@it.uc3m.es
Implementacin
basada en listas
public Object top()
throws StackEmptyException {
if (isEmpty())
throw new
StackEmptyException("vacia");
return top.getElem();
}
Java: Pilas / 35
cdk@it.uc3m.es
Borrado (pop)
Java: Pilas / 36
Madrid Miami Mnich Mosc
top
cdk@it.uc3m.es
Implementacin
basada en listas
public Object pop()
throws StackEmptyException {
Object temp;
if (isEmpty())
throw new StackEmptyException("vacia");
temp=top.getElem();
top=top.getNext();
size--;
return temp;
}
Java: Pilas / 37
cdk@it.uc3m.es
Pilas y recursin
public static long fac (int n)
{if (n<=1)
return 1;
else
return n*fac(n-1);
}
Java: Pilas / 38
cdk@it.uc3m.es
Ejecucin
fac(4)
4*fac(3)
4*(3*fac(2))
4*(3*(2*fac(1)))
4*(3*(2*1)))
4*(3*2)
4*6
24
Java: Pilas / 39
2*
3*
4*

También podría gustarte