Beruflich Dokumente
Kultur Dokumente
Definicin de pila
EDA I
Pilas
Una pila es una coleccin lineal de elementos en la que slo se pueden aadir y retirar elementos por uno de sus extremos. Se procesa con una estrategia LIFO (Last In First Out)
tercero 1. 2. 3. 4. push primero push segundo push tercero pop segundo primero top
Pilas
EDA I
EDA I
tipo pila(T) (Recurdese: Metodologa de la programacin) usa bool operaciones pvacia: pila(T) apilar: T pila(T) pila(T) cima: pila(T) T desapilar: pila(T) pila(T) es_vacia: pila(T) bool ecuaciones (1) cima(pvacia) = error (2) cima(apilar(x, p)) = x (3) desapilar(pvacia) = error (4) desapilar(apilar(x, p)) = p (5) es_vacia(pvacia) = True (6) es_vacia(apilar(x, p)) = False
Pilas 3
Descripcin
Aade un elemento a la parte superior de la pila Elimina y devuelve un elemento de la parte superior de la pila (supone que la pila no est vaca) Da acceso al elemento situado en la parte superior de la pila (supone que la pila no est vaca) Determina si la pila est vaca Determina el nmero de elementos de la pila
Pilas
EDA I
EDA I
Pilas
Pilas
EDA I
EDA I
Problemas a resolver
(Vase Reverser)
EDA I
EDA I
Problema:
Determinar si los delimitadores {, }, [, ], (, ), estn bien emparejados en una cadena de caracteres dada.
Pilas
Pilas
10
EDA I
EDA I
Comprobador de delimitadores
Variable de estado String input public void check() { Crear pila theStack del tamao de input para cada ch de input hacer { si ch es '{, '[ o ( entonces theStack.push(ch); (*Apilar ch*) si no si ch es }, ] o ) entonces si ( !theStack.isEmpty() ) (*Pila no vaca*) entonces { chx = theStack.pop(); (*Desapilar*) si (chx y ch no emparejan bien) Comunicar el error y terminar } si no // la pila est vaca prematuramente Comunicar el error y terminar } // fin del para // Todos los caracteres de input se han procesado si ( !theStack.isEmpty() ) (*Pila no vaca*) Comunicar el error } // end check()
Arrays en Java
Los arrays en java son objetos
int[ ] miTabla; miTabla = new int[100]; // define una referencia a un objeto array de enteros // crea un objeto array de tamao 100 y // hace que miTabla lo referencie
El primer ndice de un array es el 0 El atributo length, indica el nmero de posiciones del array Vase EjemArray.java (anlisis de sus fragmentos de bsqueda y eliminacin)
(Vase BracketChecker)
11 Pilas 12
Pilas
EDA I
EDA I
B
1
C
2
D
3 4 5 6 7 8 9
top
Pilas
13
Pilas
14
EDA I
EDA I
Pilas
EDA I
EDA I
Definicin de un nodo
class Link { public int iData; public double dData; public Link next; }
public LinkedList() { // constructor first = null; } public boolean isEmpty() {.} public void insertFirst(int id, double dd) {.} public Link deleteFirst() {.} public void displayList() {.} public Link find(int key) {.} public Link delete(int key) {.}
LinkedList
Link first Data next Link Data next Link Data next Link Data next null Pilas
Denominamos NODO a un objeto de la estructura ligada (en esta figura hay tres nodos de la clase Link)
Pilas 17
18
EDA I
EDA I
Insertar al principio
Linked List Link Data next Link Data next Link Data next Link Data next null first Linked List
Retirar el primero
Link Link Data next Link Data next Link Data next null
first
Data next
temp Data next newLink public void insertFirst (int id, double dd) { Link newLink = new Link(id, dd); newLink.next = first; first = newLink; } public Link deleteFirst ( ) { Link temp = first; first = first.next; return temp; }
Coste: O(1)
Pilas 19 Pilas
Coste: O(1)
20
EDA I
EDA I
first length = 4
D C B A
Coste: O(n)
Pilas
21
Pilas
22
EDA I
EDA I
//Devuelve true si esta pila no contiene ningn elemento, y false en caso contrario public boolean isEmpty (){ return (first==null); } //Devuelve el nmero de elementos de la pila public int size(){ return length; } Todas
} Pilas 23 Pilas
EDA I
EDA I
Ms ejemplos de uso
Evaluador de expresiones postfijas: Vase seccin 6.2 de [Lewis, Chase]
(3 * 4 (2 + 5)) * 4 / 2 3 4*2 5 + - 4*2 / en notacin infija en notacin postfija
Mtodo evaluador
// Se supone que expr es una expresin postfija bien formada // Devuelve el resultado de evaluar expr public int evaluate (String expr) { while no se haya procesado toda la expr { Tomar siguiente elemento de la expr if elemento es operador { op2 = extraer cima de la pila op1 = extraer cima de la pila resultado = operar (elemento, op1, op2) Poner resultado en la cima de la pila } else Poner elemento en la pila (porque es un valor) //end if }//end while return la cima de la pila }
Pilas
25
Pilas
26
EDA I
EDA I
Pilas
27
Pilas
28
EDA I
Lectura
De [Lewis, Chase 2006]
Captulo 6
Pilas
29